Java Spring Security:多个HTTP配置不起作用
我正在尝试使用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/**
页面均未得到保护,登录页面未发生任何重定向。我搜索了其他答案,但没有一个有效。
回答:
看一下Spring Security Reference:
@EnableWebSecuritypublic class MultiHttpSecurityConfig {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) { 1
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER").and()
.withUser("admin").password("password").roles("USER", "ADMIN");
}
@Configuration
@Order(1) 2
public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/api/**") 3
.authorizeRequests()
.anyRequest().hasRole("ADMIN")
.and()
.httpBasic();
}
}
@Configuration 4
public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin();
}
}
}
1正常配置身份验证
2创建一个WebSecurityConfigurerAdapter
包含的实例,@Order
以指定WebSecurityConfigurerAdapter
应首先考虑的对象。
3 http.antMatcher
指出这HttpSecurity
仅适用于以开头的URL/api/
4创建的另一个实例WebSecurityConfigurerAdapter
。如果URL
不以/api/
该配置开头,则将使用此配置。此配置被认为是之后的,ApiWebSecurityConfigurationAdapter
因为它的@Order
值是after 1(
没有@Order
默认值是last)。
您的第二个配置未使用,因为您的第一个配置匹配/**
(未antMatcher配置)。而且您的第一个配置仅限制/admin/**
,默认情况下允许所有其他URL。
以上是 Java Spring Security:多个HTTP配置不起作用 的全部内容, 来源链接: utcz.com/qa/429430.html