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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

传送门:

  1. 有关于Spring Security 基础配置:https://blog.youkuaiyun.com/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) {
   
   
                //Token过期
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值