Ответ
Spring Security настраивается для управления аутентификацией (кто вы) и авторизацией (что вам разрешено). Основные подходы — конфигурация через Java-код (рекомендуется) или XML.
Ключевые настройки:
- Аутентификация: Настройка источника данных пользователей (in-memory, JDBC, LDAP) и механизма (форма, OAuth2, JWT).
- Авторизация: Ограничение доступа к URL и методам на основе ролей и прав.
- Защита от атак: Включение защиты от CSRF и настройка CORS.
- Кастомизация: Создание собственных страниц входа, обработчиков ошибок и фильтров.
Пример базовой конфигурации (Java Config):
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/user/**").hasAnyRole("USER", "ADMIN")
.antMatchers("/public/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll()
.and()
.csrf().disable(); // Отключение CSRF для API (с осторожностью)
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user").password("{noop}password").roles("USER")
.and()
.withUser("admin").password("{noop}admin").roles("ADMIN");
}
}
Почему так? Конфигурация в коде типобезопасна и проще для рефакторинга. Расширение WebSecurityConfigurerAdapter (до Spring Security 5.7) или использование компонента SecurityFilterChain (новый стиль) позволяет централизованно управлять всей безопасностью приложения.