@Autowired дает null в RequestInterceptor

@Component
public class RequestInterceptor implements HandlerInterceptor {

    private static Logger log = LoggerFactory.getLogger(RequestInterceptor.class);

    @Autowired
    JwtUtils jwtUtils;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("[RequestInterceptor] Request received is:" + request.toString());
        String authHeader = request.getHeader("Authorization");
        String token = authHeader.split(Constants.authorizationPrefix)[1];
        log.info("token:" + token);
//      JwtUtils jwtUtils = new JwtUtils();
        DecodedJWT decodedJWT = jwtUtils.decode(token);
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

И тогда это JwtUtils:

@Service
@Component
public class JwtUtils {

private static Logger log = LoggerFactory.getLogger(JwtUtils.class);

private final Request request;
private final Environment environment;

@Autowired
public JwtUtils(Request request, Environment environment) {
    this.request = request;
    this.environment = environment;
}
public DecodedJwt decode(String token) { //decode here }

}

Я добавил @Autowired поверх класса Request. И класс Environment от org.springframework.core.env.Environment

Когда я отлаживаю, jwtUtils в RequestInterceptor - это null.

Что могло быть причиной этого ??

Я пробовал вводить поля и не использовать конструктор, но это все равно не сработало.

Когда я удаляю @Service и @Component из JwtUtils, я могу использовать оператор new для использования JwtUtils в RequestInterceptor, но в этом случае поля utowired inJwtUtils-RequestandEnvironment- becomenull`.

Случай 2: Когда я использую JwtUtils в другом классе с @Service и @Component, с ним нет никаких проблем.

И так регистрируется RequestInterceptor

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

     @Override
     public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new RequestInterceptor());
     }
}

Я попробовал вопрос, помеченный здесь как повторяющийся, и упомянул в ответе, что предложенные методы не работают.

nirvair 06.06.2018 12:47

Как вы зарегистрировали RequestInterceptor ?? с помощью оператора new или @Autowired ??

Afridi 06.06.2018 12:47

Добавлено под вопросом. Используя новый оператор.

nirvair 06.06.2018 12:49

Он должен быть подключен автоматически как @Autowired RequestInterceptor interceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(interceptor); }

Afridi 06.06.2018 12:51

Ах, большое спасибо! Работает.

nirvair 06.06.2018 13:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
25
0

Другие вопросы по теме