繁体   English   中英

如何在 SpringBoot WebFlux 中使用 GET 请求注销

[英]How to logout with GET request in SpringBoot WebFlux

我如何配置securityWebFilterChain(ServerHttpSecurity http)以便我的应用程序在GET /logoutGET /logout

我有SpringBoot 2 Spring 5WebFlux

我试过:

  http
    .logout()
      .requiresLogout(ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET, "/logout"))
      .logoutSuccessHandler(logoutSuccessHandler("/after-life"))

问题是, LogoutPageGeneratingWebFilter比发出的SecurityWebFilterChainLogoutWebFilter更早。 其中有一个硬编码的.pathMatchers(HttpMethod.GET, "/logout") - 这导致我的应用程序总是在 GET 请求上发出一个 html 页面。

我发现没有办法抑制自动注销页面的生成:(

文档中所述,

默认情况下,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();

    }

我有同样的问题,但我使用的是 OAuth2Login 并且该应用程序位于反向代理后面,剥离了前缀并使用了ForwardedHeaderTransformer 一切正常,但注销页面具有硬编码路径/logout因此无法添加自定义前缀。 我的解决方案是将注销 url 更改为/logout-oidc

http.logout(logout -> logout
            .requiresLogout(ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET, "/logout-oidc"));

糟糕的是,没有可以禁用LogoutPageGeneratingWebFilter方法setLogoutPageGenerating(boolean enable)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM