您的位置:首页 > 房产 > 建筑 > 免费3d动画制作软件_个人网站代码模板_网站优化排名软件哪些最好_百度seo推广优化

免费3d动画制作软件_个人网站代码模板_网站优化排名软件哪些最好_百度seo推广优化

2025/2/27 0:45:26 来源:https://blog.csdn.net/NiNg_1_234/article/details/143608484  浏览:    关键词:免费3d动画制作软件_个人网站代码模板_网站优化排名软件哪些最好_百度seo推广优化
免费3d动画制作软件_个人网站代码模板_网站优化排名软件哪些最好_百度seo推广优化

文章目录

  • SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
    • 一、引言
    • 二、JWT简介与组成
      • 1、JWT简介
      • 2、JWT的组成
        • 2.1、Header(头部)
        • 2.2、Payload(载荷)
        • 2.3、Signature(签名)
    • 三、Spring Security整合JWT
      • 1、生成和解析JWT
        • 1.1、生成JWT
        • 1.2、解析JWT
      • 2、配置Spring Security使用JWT
      • 3、登录和登出
        • 3.1、登录
        • 3.2、登出
    • 四、总结

SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能

一、引言

在现代Web应用开发中,安全性是一个不可忽视的重要环节。Spring Security作为Spring家族中的核心安全框架,提供了一套全面的安全解决方案,包括认证(Authentication)和授权(Authorization)。本文将详细介绍如何在SpringBoot项目中整合Spring Security,实现密码的加密解密、登录认证以及退出功能。

二、JWT简介与组成

1、JWT简介

JSON Web Tokens(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以JSON对象的形式安全地传输信息。JWT可以在不同的服务和组件之间安全地传输数据,而无需担心数据在传输过程中被篡改。在用户登录后,每个请求都需要包含JWT,这样服务端就可以验证请求的合法性,并获取到请求中携带的信息,如用户身份。

2、JWT的组成

JWT由三部分组成:Header(头部)、Payload(载荷)和Signature(签名)。这三部分共同构成了一个JWT,它们之间用点(.)分隔。

2.1、Header(头部)

Header通常包含两部分:token的类型(即JWT)和所使用的签名算法。例如,如果使用HMAC SHA256算法,则Header看起来可能如下:

{"alg": "HS256","typ": "JWT"
}
  • alg:指定了签名算法,如HS256(HMAC SHA256)。
  • typ:指定了令牌的类型,即JWT。
2.2、Payload(载荷)

Payload部分包含需要传递的信息。它是一个JSON对象,可以包含多个声明(Claims)。声明是关于实体(通常是用户)和其他数据的陈述。声明有三种类型:注册的声明、公共的声明和私有的声明。

  • 注册的声明:一组预定义的声明,它们不是强制的,但是推荐使用,例如iss(发行人)、exp(过期时间)、sub(主题)、aud(受众)等。
  • 公共的声明:可用于公共使用,但不推荐用于限定JWT的某些字段。
  • 私有的声明:用于在发行者和消费者之间传递额外的信息。这些声明是私有的,可以自定义。

例如,Payload可能包含以下内容:

{"sub": "1234567890","name": "John Doe","admin": true
}
  • sub:主题,通常指代JWT所面向的用户。
  • name:用户的名称。
  • admin:一个自定义的声明,表示用户是否是管理员。
2.3、Signature(签名)

Signature用于验证消息的完整性,防止JWT被篡改。Signature是由Header和Payload经过Base64编码后,使用密钥进行加密得到的。Signature的生成公式如下:

HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload),secret)
  • base64UrlEncode:对Header和Payload进行Base64编码,但使用URL安全的字符集。
  • secret:服务器端的密钥,用于生成和验证签名,必须保密。

例如,如果Header和Payload如下,且密钥为secret,则Signature的计算过程如下:

String header = "{...}";
String payload = "{...}";
String secret = "secret";String signature = HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret);

三、Spring Security整合JWT

1、生成和解析JWT

在Spring Security中整合JWT,我们需要创建工具类来生成和解析JWT。

1.1、生成JWT
public class JwtUtil {private static final String JWT_KEY = "secretKey"; // 密钥public static String createJWT(String subject) {return Jwts.builder().setSubject(subject).signWith(SignatureAlgorithm.HS256, JWT_KEY).compact();}
}
1.2、解析JWT
public static Claims parseJWT(String jwt) {return Jwts.parser().setSigningKey(JWT_KEY).parseClaimsJws(jwt).getBody();
}

2、配置Spring Security使用JWT

SecurityConfig中配置Spring Security以使用JWT进行认证。

@Override
protected void configure(HttpSecurity http) throws Exception {http// 其他配置....addFilterBefore(new JwtAuthenticationTokenFilter(), UsernamePasswordAuthenticationFilter.class);
}

3、登录和登出

3.1、登录

在登录时,生成JWT并返回给客户端。

public String login(String username, String password) {// 验证用户名和密码// 生成JWTString jwt = JwtUtil.createJWT(username);return jwt;
}
3.2、登出

登出时,从Redis中删除对应的JWT信息。

public void logout(String jwt) {// 解析JWT获取用户名String username = JwtUtil.parseJWT(jwt).getSubject();// 从Redis中删除JWT信息redisTemplate.delete("jwt:" + username);
}

四、总结

通过上述步骤,我们成功在SpringBoot项目中整合了Spring Security,并使用JWT实现了用户认证、密码加密解密以及登录认证退出功能。这为构建安全、可靠的Web应用提供了坚实的基础。在实际开发中,我们可以根据项目需求进一步定制和扩展安全策略。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

  • Spring Security官方文档
  • JWT官网

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com