我正在尝试使用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");
}
}
这些类是另一个类的内部类 MultipleHttpSecurityConfig
有注解的 @EnableWebSecurity
.
安全 admin/**
工作正常,但没有 consumer/**
页面是安全的,登录页面没有重定向。我寻找过其他的答案,但没有一个有效。
2条答案
按热度按时间k10s72fa1#
查看spring安全参考:
1正常配置身份验证
2创建示例
WebSecurityConfigurerAdapter
包含@Order
指定WebSecurityConfigurerAdapter
应该首先考虑。3
http.antMatcher
声明HttpSecurity
将只适用于以/api/
4创建另一个WebSecurityConfigurerAdapter
. 如果url不是以/api/
将使用此配置。此配置在ApiWebSecurityConfigurationAdapter
因为它有一个@Order
之后的值1
(否)@Order
默认为最后一个)。第二个配置未使用,因为第一个配置匹配
/**
(否)antMatcher
已配置)。你的第一个配置/admin/**
,默认情况下允许所有其他URL。i2loujxw2#
你的第一个
WebSecurityConfigurerAdapter
的匹配所有URL,将其限制为仅以开头的URL
/admin
通过使用antMatcher
: