自定义拦截器实现拦截前端请求,并解析JWT令牌

77 阅读1分钟

1、自定义拦截器

 @Component
 public class JwtTokenInterceptor implements HandlerInterceptor {
 ​
     @Autowired
     private JwtProperties jwtProperties;
 ​
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
 ​
         // 从请求头获取令牌
         String token = request.getHeader(jwtProperties.getTokenName());
         if (token == null) {
             response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
             return false;
         }
 ​
         // 校验令牌
         try {
             Claims claims = JwtUtil.parseToken(token, jwtProperties);
             Long userId = Long.valueOf(claims.get("userId").toString());
             return true;
         } catch (Exception ex) {
             // 校验失败,响应401状态码
             response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
             return false;
         }
     }
 }

2、注册拦截器配置

 @Configuration
 public class WebMvcConfiguration implements WebMvcConfigurer {
     
     @Autowired
     private JwtTokenInterceptor jwtTokenInterceptor;
 ​
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(jwtTokenInterceptor)
                 .addPathPatterns("/user/**")  // 拦截所有API路径
                 .excludePathPatterns("/user/login"); // 排除登录接口
     }
 }

注意:此篇文章要在看了 "JWT令牌实现登录授权" 这篇文章之后再看