Если вам нужно настроить несколько HttpSecurity
в вашем приложении, то вы обычно используете HttpSecurity.requestMatchers()
или один из альтернативных (но похожих) вариантов конфигурации:
HttpSecurity.requestMatcher(RequestMatcher)
HttpSecurity.antMatcher(String)
HttpSecurity.mvcMatcher(String)
HttpSecurity.regexMatcher(String)
См. Ссылку в 6.10 Несколько HttpSecurity
Например, если ваше приложение имеет набор API-интерфейсов с корнем по базовому пути /api
и другую категорию конечных точек для раздела администрирования приложения с корнем по базовому пути /admin
, чем вы можете определить 2x WebSecurityConfigurerAdapter
для вашего приложения как такового:
@EnableWebSecurity
public class SecurityConfig {
@Configuration
@Order(1)
public static class ApiWebSecurityConfig extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
http
.requestMatchers()
.antMatchers("/api/**")
.and()
.authorizeRequests()
.antMatchers("/api/endpoint1")
.hasRole("USER1");
}
}
@Configuration
public static class AdminWebSecurityConfig extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
http
.requestMatchers()
.antMatchers("/admin/**")
.and()
.authorizeRequests()
.antMatchers("/admin/endpoint1")
.hasRole("ADMIN1");
}
}
}
Однако, если вы предоставляете только 1x WebSecurityConfigurerAdapter
, вам не нужно настраивать HttpSecurity.requestMatchers()
(или любую из альтернатив), поскольку по умолчанию оно автоматическиHttpSecurity.requestMatcher(AnyRequestMatcher.INSTANCE)
.Таким образом, для этих случаев конфигурации этого достаточно:
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers(...
}
}
Надеюсь, это имеет смысл?