@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
public static ThreadLocal<LoginUser> threadLocal=new ThreadLocal<>();
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String accessToken = request.getHeader("token");
if(accessToken==null){
accessToken = request.getParameter("token");
}
if(StringUtils.isNotBlank(accessToken)){
Claims claims = JwtUtil.checkJWT(accessToken);
if(claims==null){
//未登录
CommonUtil.sendJsonMessage(response, JsonData.buildResult(BizCodeEnum.ACCOUNT_UNLOGIN));
return false;
}
Long id = Long.valueOf( claims.get("id").toString());
String headImg = (String) claims.get("head_img");
String mail = (String) claims.get("mail");
String name = (String) claims.get("name");
LoginUser loginUser=new LoginUser();
loginUser.setId(id);
loginUser.setName(name);
loginUser.setHeadImg(headImg);
loginUser.setMail(mail);
//通过threadlocal传递用户信息
threadLocal.set(loginUser);
return true;
}
CommonUtil.sendJsonMessage(response, JsonData.buildResult(BizCodeEnum.ACCOUNT_UNLOGIN));
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
登录拦截器InterceptorConfig拦截和放行路径开发配置
@Configuration
@Slf4j
public class InterceptorConfig implements WebMvcConfigurer {
public LoginInterceptor loginInterceptor(){
return new LoginInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor())
//拦截的路径
.addPathPatterns("/api/user/*/**","/api/address/*/**")
//排查不拦截的路径
.excludePathPatterns("/api/user/*/send_code","/api/user/*/captcha",
"/api/user/*/register","/api/user/*/login","/api/user/*/upload");
}
}