一、代码
@Component
@Slf4j
public class JwtInterceptorConfig implements HandlerInterceptor {
@Autowired
private JwtUtil jwtUtil;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (!(handler instanceof HandlerMethod)) {
//handler 可能是 RequestResourceHandler springboot 程序 访问静态资源 默认去classpath下的static目录去查询
return true;
}
String token = request.getHeader("X-Token");
if (!StringUtils.isEmpty(token)) {
try {
jwtUtil.parseToken(token);
log.debug(request.getRequestURI());
return true;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
log.debug(request.getRequestURI() + " 禁止访问...");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(JSON.toJSONString(Result.fail(20003, "jwt令牌无效,请重新登录")));
return false;
}
}
@Configuration
public class MyWebConfig implements WebMvcConfigurer {
@Autowired
private JwtInterceptorConfig jwtInterceptorConfig;
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("http://localhost:8001")
// .allowedOriginPatterns("https://180.xxxx.47")
.allowedOrigins("*")
.allowedHeaders("*")
.allowedMethods("*");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
InterceptorRegistration registration = registry.addInterceptor(jwtInterceptorConfig);
registration.addPathPatterns("/**")
.excludePathPatterns(
"/user/login",
"/user/info",
"/user/logout",
"/error",
"/swagger-ui/**",
"/swagger-resources/**",
"/v3/**");
}
}
二、工作原理
1、 使用原因
在使用Jwt作为安全认证工具时,如果不使用拦截器,后端就无法验证前端发来的authoriation认证信息,导致出现安全问题(前端丢失cookie、cookie被篡改)。
2、工作流程
拦截器会验证前端发来的每一次请求,并对authoriation信息进行验证,判断是否为请求的合理与安全性。同时还可以对发来的请求进行判断,仅接收后台设置的部分路由的请求。
该文章介绍了如何在SpringBoot应用中实现Jwt拦截器,用于验证前端发送的请求中的JWT令牌,确保请求的安全性。拦截器检查每个请求的X-Token头,如果令牌有效则允许请求通过,否则返回错误信息。配置还包括了添加CORS映射和排除特定不受拦截的URL路径。
2006

被折叠的 条评论
为什么被折叠?



