Почему перехватчик работает три раза? - PullRequest
0 голосов
/ 17 ноября 2018
 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 раза?

my interceptorConfig:

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

Я установил @Auth для моего класса контроллера: @Auth открытый класс ApiController

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

1 Ответ

0 голосов
/ 17 ноября 2018

Обновлено

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

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

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

  3. Если есть какой-то редирект по вашему запросу?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...