Spring security logoutSuccessUrl to loginlogout 似乎受到保护,虽然登录页面允许所有人

haluo1 阅读:129 2025-02-15 21:57:57 评论:0

我有以下 Spring Security 设置。
请注意,成功注销会再次返回登录页面。

    http 
        .csrf() 
            .disable() 
        .authorizeRequests() 
            .antMatchers("/**").hasRole("USER") 
            .and() 
        .formLogin() 
            .loginPage("/login") 
            .failureUrl("/login?error") 
            .defaultSuccessUrl("/") 
            .permitAll() 
            .and() 
        .logout() 
            .logoutUrl("/logout") 
            .logoutSuccessUrl("/login?logout") 

我可以使用此设置登录和注销。
然而,注销以/login 而不是/login?logout 结束。

当我再次登录时,它会转到/login?logout。

所以看起来/login?logout 似乎受到保护......尽管登录页面是允许的。

任何想法如何解决这个问题?

编辑

正如 Bart 建议的那样,我尝试添加一个 AntMatcher 进行登录?注销,例如:
    http 
        .csrf() 
            .disable() 
        .authorizeRequests() 
            .antMatchers("/ogin?logout").permitAll() 
            .antMatchers("/app/**").hasRole("USER") 
            .antMatchers("/login?logout").permitAll() 
            .and() 
        .formLogin() 
            .loginPage("/app/login") 
            .failureUrl("/app/login?error") 
            .defaultSuccessUrl("/app") 
            .permitAll() 
            .and() 
        .logout() 
            .logoutUrl("/app/logout") 
            .logoutSuccessUrl("/app/login?logout") 

但它给出了相同的行为。注意我尝试在保护所有/** 源之前和之后添加它。

请您参考如下方法:

现在使用以下代码遇到了对我有用的相同问题:

http.logout().logoutSuccessUrl("/login?logout").permitAll(); 

(即添加 .permitAll() 是关键部分)


标签:Spring
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号