Авторизация
Тема дорожной карты · Spring Boot
Авторизация в Spring Security — это механизм в Spring Boot, определяющий, имеет ли аутентифицированный субъект права на выполнение конкретного действия или доступ к определённому ресурсу. Spring Security оценивает решения об авторизации на уровне методов с помощью аннотаций @PreAuthorize, @PostAuthorize и @Secured, а на уровне HTTP — через правила HttpSecurity.authorizeHttpRequests(), определённые в бине SecurityFilterChain. Управление доступом на основе ролей выражается такими выражениями, как hasRole('ADMIN') или hasAuthority('SCOPE_read'), тогда как управление доступом на основе атрибутов использует Spring Expression Language (SpEL) для оценки условий во время выполнения. Авторизация в Spring Security работает совместно с аутентификацией: после того как пользователь аутентифицирован, список GrantedAuthority, прикреплённый к объекту Authentication, управляет всеми последующими проверками авторизации. Для Spring Boot API, защищённых OAuth2 и JWT, области доступа, встроенные в токен, автоматически преобразуются в экземпляры GrantedAuthority с помощью JwtAuthenticationConverter, обеспечивая тонко настроенный контроль доступа без дополнительного кода.
Как это работает
Авторизация (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.
Типичные ошибки
Ловушки Авторизация: глобальное отключение CSRF, потому что "мешает" (security инцидент ждёт); валидируют JWT signature но не exp/iss/aud (просроченные/forged токены принимаются); используют deprecated WebSecurityConfigurerAdapter (Spring Security 6 удалил); хардкод role names без ROLE_ prefix не соответствует hasRole-семантике.