Ответ
Spring Security извлекает JWT (JSON Web Token) с помощью специального фильтра, который проверяет стандартные места в HTTP-запросе. Чаще всего для этого используется BearerTokenAuthenticationFilter или его кастомная реализация.
Стандартный процесс извлечения:
- Фильтр ищет токен в заголовке Authorization по схеме
Bearer:Authorization: Bearer <your_jwt_token> - Если токен не найден в заголовке, фильтр может проверить параметр запроса (например,
?token=<value>), хотя это менее безопасно.
Пример настройки с использованием Spring Security OAuth2 Resource Server (рекомендуемый способ):
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth.anyRequest().authenticated())
.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt); // Включает JWT-обработку
return http.build();
}
}
Как это работает внутри? Конфигурация jwt() автоматически регистрирует JwtAuthenticationProvider и фильтр, который:
- Извлекает токен из заголовка
Authorization. - Валидирует его подпись и срок действия.
- Создает объект
JwtAuthenticationTokenи помещает его вSecurityContextHolder.
Почему Bearer-схема? Это стандарт (RFC 6750), который четко отделяет тип токена и позволяет серверу его корректно интерпретировать.