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:

@EnableWebSecurity

public 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

回到顶部