Spring Security WebFlux 注销

Posted

技术标签:

【中文标题】Spring Security WebFlux 注销【英文标题】:Spring Security WebFlux logout 【发布时间】:2020-04-02 20:32:28 【问题描述】:

在进行类似于

的注销时,在 WebFlux 中使会话无效和删除 cookie 的等效方法是什么?
public class SecurityConfig extends WebSecurityConfigurerAdapter 



    @Override
    protected void configure(HttpSecurity http) throws Exception
    
        http
        .httpBasic()
        .and()
        .logout().clearAuthentication(true)
        .logoutSuccessUrl("/")
        .deleteCookies("JSESSIONID")
        .invalidateHttpSession(true)
        .and()
...

【问题讨论】:

【参考方案1】:

除了cookie“SESSION”和WebSession(WebFlux中的会话名)默认被移除之外,你可以配置一个ServerLogoutSuccessHandler:

    .logout()
        .logoutSuccessHandler(new ServerLogoutSuccessHandler() 
            @Override
            public Mono<Void> onLogoutSuccess(WebFilterExchange exchange, Authentication authentication) 
                ServerHttpResponse response = exchange.getExchange().getResponse();
                response.setStatusCode(HttpStatus.FOUND);
                response.getHeaders().setLocation(URI.create("/login.html?logout"));
                response.getCookies().remove("JSESSIONID");
                return exchange.getExchange().getSession()
                    .flatMap(WebSession::invalidate);
            
        )

【讨论】:

以上是关于Spring Security WebFlux 注销的主要内容,如果未能解决你的问题,请参考以下文章

WebFlux Spring Security配置

Spring Webflux Security 中的角色层次结构

将 spring-security 与 spring-webflux 一起使用时禁用 WebSession 创建

在 Spring WebFlux 中使用 Spring Security 实现身份验证的资源是啥

Spring WebFlux + Security - 我们有“记住我”功能吗?

如何在 Spring WebFlux Security(Reactive Spring Security)配置中将多个用户角色添加到单个 pathMatcher/Route?