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 истинно, но я вижу, что log.info ("1") запускается 3 раза, почему он запускается 3 раза?

Мой interceptorConfig:

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(authenticationInterceptor())
            .addPathPatterns("/**");
}
@Bean
public AuthenticationInterceptor authenticationInterceptor() {
    return new AuthenticationInterceptor();
}

Я установил @Auth в своем классе контроллера: @Auth публичный класс ApiController

И когда я очищаю свой preHandle exclude "log.info (" 1 ") return true", который выполняется 3 раза

1
Lce Man 17 Ноя 2018 в 11:54

1 ответ

Лучший ответ

Обновлено

Вы можете выполнить отладку в AuthenticationInterceptor, чтобы подтвердить кое-что:

  1. если handlerMethod наведет на другой объект всего 3 раза?

  2. если AuthenticationInterceptor, то есть this переменная , отличается или нет?

  3. Есть ли редирект для вашего запроса?

Я пробовал использовать какой-то код, похожий на ваш, он ведет себя правильно. Можете ли вы показать больше кода или простой способ воспроизвести проблему?

0
gavincook 17 Ноя 2018 в 10:38