public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) {
String jwt = request.getHeader("auth");
String payloadKey = "apitest";
HandlerMethod handlerMethod=(HandlerMethod)object;
Class type = handlerMethod.getBeanType();
if (type.isAnnotationPresent(Auth.class)) {
try {
if (jwt == null || !Objects.equals(payloadKey, JwtUtil.parseJWT(jwt).get("info", String.class))) {
return false;
}
}catch (ExpiredJwtException | SignatureException | MalformedJwtException e){
return false;
}
}
log.info("1");
return true;
}
当jwt是true时,但我看到log.info(“ 1”)运行3次,为什么它运行3次?
我的拦截器配置:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authenticationInterceptor())
.addPathPatterns("/**");
}
@Bean
public AuthenticationInterceptor authenticationInterceptor() {
return new AuthenticationInterceptor();
}
我在控制器类上设置了@Auth: @Auth公共类ApiController
当我清除preHandle时,排除运行3次的“ log.info(“ 1”)返回true”
答案 0 :(得分:0)
已更新
您可以调试到AuthenticationInterceptor
中,以确认某些内容:
如果handlerMethod
总共指向3个不同的对象?
是AuthenticationInterceptor
变量的this
是否不同?
如果您的请求有一些重定向?
我尝试使用类似您的代码,它具有正确的行为。您可以显示更多代码还是重现问题的简单方法?