Spring Security之前后端分离(二)JWT令牌

本文详细介绍了在Spring Security中如何配置JWT令牌进行前后端分离的认证。内容包括配置Token拦截器、JWT工具类的创建、Security配置的调整以及登录获取和使用Token的流程。同时提供了GitHub链接供读者查阅完整代码。
摘要由CSDN通过智能技术生成

Spring Security之前后端分离(二)JWT令牌

传送门:

  1. 有关于Spring Security 基础配置:https://blog.csdn.net/MostSnails/article/details/126312877
  2. 基础配置默认官方使用Session方式,分布式服务请求是无状态故Session有点满足要求。本期实践JWT以Token方式请求认证。
  3. 什么是JWT、采用哪些部分组成?这里就不多叙述,自行百度。

如何配置

  1. 配置Token拦截器,在UsernamePasswordAuthenticationFilter过滤器前先执行Token拦截器,UsernamePasswordAuthenticationFilter在基础配置中有讲过。

  2. JWT生成器、解析器、Login请求下发Token

  3. Security配置主要关闭Session、添加Token拦截器入配置

配置Token拦截器
  1. 需要实现OncePerRequestFilter接口,拦截所有请求,检测Header中Authorization属性、验证属性(过期、非法)、放行进入UsernamePasswordAuthenticationFilter

  2. 没有Authorization属性,直接放行,进入下一个过滤器属于Security,Security会去验证当前URL是否可匿名访问或需要权限访问。

/**
 * Token过滤器
 * desc:验证请求Token合法性
 */
@Component
public class TokenPerRequestFilter extends OncePerRequestFilter {
   

    @Autowired
    private UserService userService;



    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
   
        //  获取Authorization属性
        String token = request.getHeader("Authorization");
        if (StringUtils.isNotEmpty(token)) {
   
            //解析Token获取载荷
            try {
   
                Claims claims = JwtUtil.parseJWT(token);
                //获取用户信息 在创建Token Subject是传入json  这里可以获取你json值 Subject是可以任何,怎么set 就怎么get
                String userName = claims.getSubject();
                UserDetails userDetails = userService.loadUser(userName);
                UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
                //放入上下文
                SecurityContextHolder.getContext().setAuthentication(authenticationToken);

            } catch (ExpiredJwtException exception) {
   
            
Spring Boot Security OAuth2是基于Spring Security和OAuth2的框架,用于实现授权服务器和资源服务器。JWT令牌是一个基于JSON的开放标准,用于在各方之间安全地传输信息。 在Spring Boot Security OAuth2中实现支持JWT令牌的授权服务器,可以按照以下步骤进行: 1. 添加依赖:在项目的pom.xml文件中添加Spring Security OAuth2和JWT的相关依赖。 2. 配置授权服务器:在Spring Boot应用程序的配置文件中,配置授权服务器的基本设置,包括端点URL、客户端信息、用户认证信息等。 3. 配置JWT令牌:配置JWT令牌的签名密钥和过期时间等信息。可以使用开源库如jjwt来生成和验证JWT令牌。 4. 创建自定义的认证提供程序:实现自定义的认证提供程序来支持JWT令牌的认证机制。在认证提供程序中,可以使用JWT令牌解析并验证请求中的令牌信息。 5. 创建自定义的用户详细信息服务:实现自定义的用户详细信息服务,用于从数据库或其他存储中获取用户的详细信息。在用户详细信息服务中,可以根据JWT令牌中的信息获取用户信息。 6. 配置授权服务器的访问规则:配置授权服务器的访问规则,包括允许或禁止特定角色或权限的访问。 7. 测试访问授权服务器:使用客户端应用程序发送请求到授权服务器的端点,获取JWT令牌并验证其有效性。 通过以上步骤,可以实现一个支持JWT令牌的授权服务器。该服务器可以提供为客户端应用程序颁发和验证JWT令牌的功能,以实现安全并可靠的用户认证和授权控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值