@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());
}
}
Как вы зарегистрировали RequestInterceptor ?? с помощью оператора new или @Autowired ??
Добавлено под вопросом. Используя новый оператор.
Он должен быть подключен автоматически как @Autowired RequestInterceptor interceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(interceptor); }
Ах, большое спасибо! Работает.




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