问题遇到的现象和发生背景
spingboot项目,拦截器这里爆红
正常的运行结果应是控制台下有个输出信息“拦截器进入”的,但这里拦截器没有执行到!
用代码块功能插入代码,请勿粘贴截图
这里是拦截器的逻辑
package com.example.portalweb.interceptor;
import ch.qos.logback.core.LogbackException;
import com.example.base.annotations.TokenCheck;
import com.example.util.JwtUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.security.auth.login.LoginException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
public class AuthInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("拦截器进入");
//用户登录后会把token下发到用户端,用户端会把token存在客户端中,
//每次请求后就不是在正文参数中带上token,而是把token放到请求头里!
String token = request.getHeader("token");
if (StringUtils.isBlank(token)){
// throw new LoginException("token 为空");
return false;
}
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
if (method.isAnnotationPresent(TokenCheck.class)){
TokenCheck annotation = method.getAnnotation(TokenCheck.class);
if (annotation.required()){
//校验token
try {
JwtUtil.parseToken(token);
return true;
}catch (Exception e){
return false;
}
}
}
return true;
}
@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);
}
}
这是Controller层
@PostMapping("/edit")
@TokenCheck //拦截器解析这个注解
public ResultWrapper edit(@RequestBody Userbackgroundtable userbackgroundtable){
return userbackgroundtableService.edit(userbackgroundtable);
}