如何配置securityWebFilterChain(ServerHttpSecurity http)
以便我的应用程序在GET /logout
上注销?
我有SpringBoot 2
Spring 5
和WebFlux
我尝试过:
http
.logout()
.requiresLogout(ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET, "/logout"))
.logoutSuccessHandler(logoutSuccessHandler("/after-life"))
问题是,LogoutPageGeneratingWebFilter
的位置早于发出的LogoutWebFilter
中的SecurityWebFilterChain
。那里有一个硬编码的.pathMatchers(HttpMethod.GET, "/logout")
-使我的应用程序始终在GET请求中发出html页面。
我发现没有办法抑制自动注销页面的生成:(
答案 0 :(得分:1)
如文档中所述,
默认是Spring Security将在“ / login”处生成一个登录页面,并在“ / logout”处生成一个注销页面。如果这是自定义的: 不再提供默认的登录和注销页面 应用程序必须在提供的URL上呈现登录页面 应用程序必须在提供的URL +“?error”上呈现身份验证错误页面。 POST将验证到提供的URL
自定义配置以具有默认登录名而没有默认注销。
@Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity httpSecurity){
LoginPageGeneratingWebFilter loginpage= new LoginPageGeneratingWebFilter();
loginpage.setFormLoginEnabled(true);
return httpSecurity
.addFilterAt(loginpage, SecurityWebFiltersOrder.LOGIN_PAGE_GENERATING)
.authorizeExchange()
.pathMatchers("/home").authenticated()
.and().formLogin()
.loginPage("/login")
.and()
.logout()
.logoutUrl("/logout").requiresLogout(ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET, "/logout"))
.and()
.build();
}
答案 1 :(得分:1)
我有同样的问题,但是我正在使用OAuth2Login,并且该应用程序位于反向代理后面,该反向代理通过剥离前缀并使用ForwardedHeaderTransformer
。一切正常,但注销页面具有硬编码的路径/logout
,因此无法添加自定义前缀。我的解决方案是将注销网址更改为/logout-oidc
http.logout(logout -> logout
.requiresLogout(ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET, "/logout-oidc"));
糟糕的是,没有方法setLogoutPageGenerating(boolean enable)
可以禁用LogoutPageGeneratingWebFilter