Spring Security

Тема дорожной карты · Spring Boot

Spring Security — де-факто стандартный фреймворк безопасности для Spring Boot-приложений, обеспечивающий комплексную аутентификацию, авторизацию и защиту от распространённых уязвимостей — CSRF, фиксации сессий и кликджекинга. Он интегрируется через spring-boot-starter-security, который авто-конфигурирует SecurityFilterChain, по умолчанию защищающий все эндпоинты HTTP Basic-аутентификацией и предоставляя командам безопасный стартовый пункт, постепенно настраиваемый через классы конфигурации @EnableWebSecurity. Spring Security поддерживает широкий спектр механизмов аутентификации — форменный вход, HTTP Basic, JWT Bearer-токены, OAuth2 / OpenID Connect через Spring Authorization Server, LDAP, SAML 2.0 и Yandex ID или другие пользовательские провайдеры OAuth2 — делая его адаптируемым к практически любой идентификационной инфраструктуре. Метод-уровневая безопасность, включаемая через @EnableMethodSecurity, позволяет использовать аннотации @PreAuthorize("hasAuthority('SCOPE_write')") на методах @Service, обеспечивая тонко настроенную авторизацию в дополнение к URL-уровневым правилам в SecurityFilterChain. Spring Security тесно интегрируется со Spring Data для запросов к репозиториям с осведомлённостью о субъекте через аудит @CreatedBy, Spring Session для распределённого управления сессиями на базе Redis и интеграционными тестами на основе Testcontainers, проверяющими правила безопасности на реальном HTTP-трафике.

Как это работает

Spring Security (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.

Типичные ошибки

Ловушки Spring Security: глобальное отключение CSRF, потому что "мешает" (security инцидент ждёт); валидируют JWT signature но не exp/iss/aud (просроченные/forged токены принимаются); используют deprecated WebSecurityConfigurerAdapter (Spring Security 6 удалил); хардкод role names без ROLE_ prefix не соответствует hasRole-семантике.

Связанные понятия

Полезные ресурсы