SecurityFilterChain
Тема дорожной карты · Spring Boot
Конфигурация Spring Security в Spring Boot строится вокруг бина SecurityFilterChain, который заменяет устаревший WebSecurityConfigurerAdapter из Spring Security 5.7 и предоставляет разработчикам компонуемый, лямбда-ориентированный DSL для определения правил аутентификации и авторизации. Класс @Configuration, аннотированный @EnableWebSecurity, объявляет один или несколько бинов SecurityFilterChain с использованием HttpSecurity, указывая, какие URL-паттерны требуют каких прав — например, http.authorizeHttpRequests(auth -> auth.requestMatchers("/api/admin/**").hasRole("ADMIN").anyRequest().authenticated()) — и какие механизмы аутентификации активировать. Конфигурация Spring Security также управляет управлением сессиями (SessionCreationPolicy.STATELESS для JWT-ориентированных REST API), защитой от CSRF (обычно отключается для бесстатусных сервисов), политиками CORS и заголовками безопасности HTTP, такими как HSTS и Content-Security-Policy, защищающими от распространённых веб-уязвимостей. Для OAuth2-серверов ресурсов добавление .oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults())) вместе с spring.security.oauth2.resourceserver.jwt.issuer-uri автоматически подключает валидацию JWT, тогда как @PreAuthorize и @PostAuthorize обеспечивают метод-уровневые охранники безопасности на бинах @Service. Правильная конфигурация Spring Security является фундаментом каждого безопасного Spring Boot-микросервиса, тестируемым с @WithMockUser или @WithSecurityContext в интеграционных тестах @SpringBootTest и @WebMvcTest.
Как это работает
SecurityFilterChain (Spring Security 6.x): SecurityFilterChain (Java config заменяет старый WebSecurityConfigurerAdapter) конфигурирует HTTP security. AuthenticationManager + UserDetailsService для username/password. AuthorizationManager + method security (@PreAuthorize("hasRole('ADMIN')")) гейтят доступ. JWT через spring-security-oauth2-resource-server. OAuth 2.0 клиент + resource server для SSO. CSRF on для state-changing запросов; CORS конфигурируется per SecurityFilterChain. Самый часто misconfigured компонент Spring.
Когда применять
Не пишите свой auth — у Spring Security есть security-review, у вас нет. OAuth 2.0 / OIDC для SSO; resource server + JWT для stateless API. Валидируйте tokens централизованно (фильтр, не в каждом контроллере). @PreAuthorize-правила tight + audited. Отключайте CSRF только для stateless JWT API — не для browser sessions.
Типичные ошибки
Ловушки SecurityFilterChain: глобальное отключение CSRF, потому что "мешает" (security инцидент ждёт); валидируют JWT signature но не exp/iss/aud (просроченные/forged токены принимаются); используют deprecated WebSecurityConfigurerAdapter (Spring Security 6 удалил); хардкод role names без ROLE_ prefix не соответствует hasRole-семантике.