package com.hxzkappboot.util; //import com.certificateManage.common.BaseContext; //import com.certificateManage.common.R; //import com.certificateManage.util.tokenUtil.JwtTokenUtil; import org.springframework.lang.Nullable; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Component public class JwtInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 从请求头中获取JWT String token = request.getHeader("Authorization"); if ("OPTIONS".equalsIgnoreCase(request.getMethod())){ System.out.println("OPTIONS请求,放行"); return true; } if (token == null || !token.startsWith("Bearer ")) { // 如果没有JWT或者格式不正确,返回错误 response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "token令牌不存在或请求头格式错误"); return false; } // 去除"Bearer "前缀,获取真正的JWT token = token.substring(7); try { // 验证JWT R r=JwtUtils.checkToken(token); // JWT验证成功,继续处理请求 if (r.getCode()==0) { // 将用户ID存储在ThreadLocal中 BaseContext.setUserId(String.valueOf(r.getData())); return true; }else { // JWT验证失败,返回错误 response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Token验证失败"); return false; } } catch (Exception e) { // JWT验证失败,返回错误 response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Token验证失败"); return false; } } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 在请求处理完毕后清除用户ID BaseContext.clearUserId(); } }