package com.jisuan.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();
|
}
|
}
|