В моем приложении Spring Boot я обрабатываю JWT со следующим Filter
:
(нерелевантный код для краткости опущен)
@Component
public class JwtFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(
HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
// processing the JWT from the request
Authentication auth =
new UsernamePasswordAuthenticationToken(username, password, roles);
SecurityContextHolder.getContext().setAuthentication(auth);
filterChain.doFilter(request, response);
}
}
Это прекрасно работает, но я бы хотел перенести эту функцию на перехватчик, поэтому я просто добавил ту же логику в HandlerInterceptor
:
@Component
public class JwtInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(
HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
// processing the JWT from the request
Authentication auth =
new UsernamePasswordAuthenticationToken(username, password, roles);
SecurityContextHolder.getContext().setAuthentication(auth);
return true;
}
}
Но в этом случае я всегда получаю 403 Запрещенного ответа на мои запросы.
Я отладил JwtInterceptor
, и, похоже, он работает правильно.
preHandle()
полностью выполнен, setAuthentication()
вызывается с правильным параметром auth
и функция возвращает true
.
Так что я думаю, Authentication
теряется после выполнения этого перехватчика, но я не могу понять, почему, и на данный момент я действительно не знаю, как отлаживать дальше.
Буду очень признателен за любой совет, как решить эту проблему (или даже просто как выяснить, в чем может быть проблема).