1、定义上下文类
public class BaseContext {
public static ThreadLocal<Long> threadLocal = new ThreadLocal<>();
public static void setCurrentId(Long id) {
threadLocal.set(id);
}
public static Long getCurrentId() {
return threadLocal.get();
}
public static void removeCurrentId() {
threadLocal.remove();
}
}
2、在拦截器中解析JWT令牌,拿到用户ID后,进行存储
@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());
BaseContext.setCurrentId(empId);
return true;
} catch (Exception ex) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
return false;
}
}
}