【发布时间】:2020-06-18 09:24:54
【问题描述】:
我正在尝试实现两种不同的安全配置(适用于管理员和普通用户)。为了实现这一点,我有两个扩展 WebSecurityConfigurerAdapter 的类 - 每个用户类型一个。
我的问题是管理员的配置被应用并按预期工作,重定向到登录页面,但我的其他配置似乎没有任何影响。更改 @Order 注释似乎不会改变任何东西。日志显示,在应用程序部署时,两个过滤器都应用于链。
我的配置类:
@Configuration
@Order(1)
public class AdminConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/images/**", "/css/**", "/js/**", "/webjars/**", "**/favicon.ico");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/login")
.permitAll()
.antMatchers("/admin/**")
.hasRole("ADMIN")
.and()
.formLogin()
.loginPage("/admin/login")
.loginProcessingUrl("/admin/loginAction")
//.failureUrl("/loginAdmin?error=loginError")
.defaultSuccessUrl("/admin/dashboard", true)
.and()
.logout()
.logoutUrl("/admin/logoutAction")
//.logoutSuccessUrl("/protectedLinks")
.deleteCookies("JSESSIONID")
.and()
.exceptionHandling()
.accessDeniedPage("/403")
.and()
.csrf().disable();
}
@Override
protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin").password(passwordEncoder().encode("admin")).roles("ADMIN");
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
二等:
@Configuration
@Order(2)
public class GameConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/images/**", "/css/**", "/js/**", "/webjars/**", "**/favicon.ico");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/game/login")
.permitAll()
.antMatchers("/game/**")
.hasRole("USER")
.and()
.formLogin()
.loginPage("/game/login")
.loginProcessingUrl("/game/login")
//.failureUrl("/game/login")
.defaultSuccessUrl("/game/home", true)
.and()
.logout()
.logoutUrl("/game/logout")
//.logoutSuccessUrl("/")
.deleteCookies("JSESSIONID")
.and()
.exceptionHandling()
.accessDeniedPage("/403")
.and()
.csrf().disable();
}
}
【问题讨论】:
标签: spring-boot spring-security