我正在尝试使用Spring Security,我的用例是希望有不同的登录页面和不同的URL集合需要安全保护。
以下是我的配置:
@Configuration
@Order(1)
public static class ProviderSecurity extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll()
.antMatchers("/admin/login").permitAll()
.antMatchers("/admin/**").access("hasRole('BASE_USER')")
.and()
.formLogin()
.loginPage("/admin/login").permitAll()
.defaultSuccessUrl("/admin/home")
.failureUrl("/admin/login?error=true").permitAll()
.usernameParameter("username")
.passwordParameter("password")
.and()
.csrf()
.and()
.exceptionHandling().accessDeniedPage("/Access_Denied");
}
}
@Configuration
@Order(2)
public static class ConsumerSecurity extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/consumer/login").permitAll()
.antMatchers("/consumer/**").access("hasRole('BASE_USER')")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/consumer/login").permitAll()
.defaultSuccessUrl("/consumer/home")
.failureUrl("/consumer/login?error=true").permitAll()
.usernameParameter("username")
.passwordParameter("password")
.and().csrf()
.and()
.exceptionHandling().accessDeniedPage("/Access_Denied");
}
}
这些类是另一个带有注释@EnableWebSecurity
的类 MultipleHttpSecurityConfig
的内部类。
admin / **
的安全性很好,但是consumer / **
页面没有受到保护,没有重定向到登录页面。我已经搜索了其他答案,但都没有起作用。
WebSecurityConfigurerAdapter
,这些适配器按照@Order
注释中指定的优先级顺序进行考虑。 首先匹配.requestMatchers().antMatchers("/matcher/**")
的适配器被使用,其他适配器被丢弃。也就是说,WebSecurityConfigurerAdapter
不会堆叠。 - maricn