【发布时间】:2018-04-14 08:51:12
【问题描述】:
我有一个使用 spring-security 的 spring-boot 应用程序。安全配置被拆分为多个WebSecurityConfigurerAdapter 实例。
我有一个配置注销的地方:
@Override
protected void configure(HttpSecurity http) throws Exception {
// configure logout
http
.logout()
.logoutUrl("/logout")
.invalidateHttpSession(true)
.addLogoutHandler((request, response, authentication) -> {
System.out.println("logged out 1!");
})
.permitAll();
// ... more security configuration, e.g. login, CSRF, rememberme
}
还有另一个WebSecurityConfigurerAdapter,我几乎什么都不想做,除了添加另一个LogoutHandler:
@Override
protected void configure(HttpSecurity http) throws Exception {
// configure logout
http
.logout()
.logoutUrl("/logout")
.addLogoutHandler((request, response, authentication) -> {
System.out.println("logged out 2!");
});
}
两个configure() 方法都被调用。但是,如果我确实注销,则只会调用第一个 LogoutHandler。更改两种配置的@Order 不会改变结果。
我的配置中缺少什么?
【问题讨论】:
-
您是在尝试将两个注销处理程序注册到同一个 url,还是要专门设置一个不运行其他所有内容的注销?
-
两个 LogoutHandlers 应该在同一个注销时运行。
-
试试那个链接,docs.spring.io/spring-security/site/docs/current/reference/… 我觉得你的网址是一样的。
-
我当然知道那个链接,但我应该特别关注哪个部分?我的观点是模块化配置功能。
-
他们有@Order(2) 和@Order(3),改变它不会影响调用哪个处理程序。它始终是更“宽”配置中的一个。无论如何,在这两种情况下,我都希望两者都被调用。但也许当前版本无法做到这一点?
标签: java spring spring-mvc security spring-security