Назад к вопросам
Junior — Middle
93
Каким образом Spring Security проверяет наличие JWT в HTTP-запросе для авторизации?
Ответ от нейросети
sobes.tech AI
Spring Security обычно проверяет наличие JWT в HTTP-запросе через фильтр, например, OncePerRequestFilter. В этом фильтре происходит извлечение токена из заголовка Authorization (обычно в формате Bearer <token>). Если токен присутствует, он валидируется (проверяется подпись, срок действия и т.д.), после чего создаётся объект аутентификации и помещается в SecurityContext.
Пример упрощённого фильтра для проверки JWT:
public class JwtAuthenticationFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
String header = request.getHeader("Authorization");
if (header != null && header.startsWith("Bearer ")) {
String token = header.substring(7);
// Валидация токена (проверка подписи, срока действия и т.д.)
if (validateToken(token)) {
Authentication auth = getAuthentication(token);
SecurityContextHolder.getContext().setAuthentication(auth);
}
}
filterChain.doFilter(request, response);
}
private boolean validateToken(String token) {
// Логика валидации JWT
return true; // пример
}
private Authentication getAuthentication(String token) {
// Создание объекта Authentication на основе токена
return new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
}
}