当前位置: 首页 > 知识库问答 >
问题:

注销不适用于Spring Boot、Spring Security和胸腺五叶

杨飞语
2023-03-14

我正在尝试为我们的 Spring 启动应用程序添加注销功能,但 Spring 注销不起作用......经过身份验证的用户仍然存在,并且不会清除安全上下文。真正让我感到惊讶的是,它有时有效,有时无效。我不知道为什么!

蒂梅拉夫:

<li><a class="dropdown-item" href="javascript: document.logoutForm.submit()" role="menuitem"><i class="fas fa-sign-out-alt"></i> Logout</a></li>
           <form name="logoutForm" th:action="@{/logout}" method="post" th:hidden="true">
                        <input hidden type="submit" value="Sign Out"/>
            </form>

下面是我注销的代码块;

.logout()
.clearAuthentication(true)
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/oauth2/authorization/login")
.addLogoutHandler(new HeaderWriterLogoutHandler(
      new ClearSiteDataHeaderWriter(
            ClearSiteDataHeaderWriter.Directive.CACHE,
            ClearSiteDataHeaderWriter.Directive.COOKIES,
            ClearSiteDataHeaderWriter.Directive.STORAGE)));

我也尝试过,但没有帮助;

.deleteCookies("JSESSIONID")
.invalidateHttpSession(true) 

有人知道它为什么会有如此奇怪的行为吗?

共有2个答案

袁宜
2023-03-14

我有类似的问题。现在它已解决。我使用了以下代码:

.and().logout().logoutSuccessUrl("/logoutSuccess").deleteCookies("JSESSIONID").invalidateHttpSession(true);

试试这个。它在我的机器上工作。

竺勇
2023-03-14

假设问题是oauth2登录/注销配置的配置不完整:

@EnableWebSecurity
public class WebSecurity extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/").permitAll()
                .anyRequest().authenticated()
                .and()
                .logout()
                .logoutSuccessHandler(logoutSuccessHandler())
                .invalidateHttpSession(true)
                .clearAuthentication(true)
                .deleteCookies("JSESSIONID")
                .and()
                .oauth2Login();
    }
    
    private LogoutSuccessHandler logoutSuccessHandler() { 
        ...
    }
}

注意两个时刻:

  • .oauth2Login() - 使用 OAuth 2.0 配置身份验证支持
  • .logoutSuccessHandler(...) - 在用户结束会话的正确 oauth2 服务器注销endpoint上重定向。不幸的是,我不知道您的oauth2提供程序,无论如何,我建议查看OidcClientInitiatedLogoutSuccessHandler以找出如何重定向到注销URL。如果您不使用 openid OAuth2 提供程序,则可以基于 SimpleUrlLogoutSuccessHandler 实现您自己的注销处理程序,您应该只知道注销 URL 和 url 参数,以便在 OAuth2 服务器上成功注销后重定向。
 类似资料:
  • 我正在学习springsecurity(基于java的配置),我无法使注销正常工作。当我点击注销时,我看到URL更改为http://localhost:8080/logout并获取“HTTP 404-/logout”。登录功能工作正常(即使使用自定义登录表单),但问题是注销,我怀疑重定向的url“localhost:8080/logout”应该类似于“localhost:8808/springte

  • 我想做一些像 在百里香叶中。我知道有一个价值观,我要做的就是 如何在Thyemleaf的select选项中传递两个值。

  • 我的PDF包含一个文本形式的带有连字符符号的URL。当我通过标记直接从PDF复制URL时,当连字符位于行的末尾时,符号在粘贴后消失。 我有以下html: 但复制粘贴后,我得到的url没有连字符:https://sec2mms.hansatonich.at/test.t.ozkq/ 我错过了什么?

  • 我有这个密码; 其中,是存储在属性文件中的“子类型”的国际化字符串。所以我可以看出i18n设置正确。但是,我无法确定替换h6元素中的字符串子类型的语法。二者都 并给出语法错误。有人能给我指一下正确的方向吗。

  • 最近,我尝试了Spring4中新的内置CORS支持。这个特性很棒,我想在我的Spring Boot/AngularJS应用程序中实现它。 所有请求都可以正常工作,但是我不能注销我的用户,因为-request to是由Spring Security处理的。 是否可以在Spring Security之前处理-request,或者是否应该在中附加cors-header?

  • 我正在尝试为我的站点使用th: each函数,以查找我数据库中的所有狗,并使用以下代码。在我的控制器中,我有: 在这个for循环之后,我对数组中的每个对象进行了println,并验证了我的所有dog对象都是有效的且不为null。在验证数组是否正确后,我将其作为模型传递,并尝试在html中获取它。当前的问题是,当我转到html时,它什么也不显示。我没有收到任何thymeleaf错误,只是一个空白屏幕