【问题标题】:Spring Security 3.2 Can't LogoutSpring Security 3.2 无法注销
【发布时间】:2014-04-23 15:22:24
【问题描述】:

我有一个 Spring Security java 配置

@Override
protected void configure(HttpSecurity http) throws Exception {

    http.
               ...
            .logout()
                .permitAll();
   }

并且根据文档(http://docs.spring.io/spring-security/site/docs/3.2.0.RELEASE/reference/htmlsingle/),注销 URL 与之前的版本相同为 j_spring_security_logout(有趣的是登录表单中的任何其他 URL 已更改)。该网址对我不起作用。

有什么遗漏吗?

【问题讨论】:

  • 你能分享你的 SS XML 吗?
  • 能否详细描述一下问题。
  • 哪个版本的 Spring Security(jar 文件)?
  • @OhadR 我使用 Java 配置,如我的问题所示。
  • @KingMaker 我使用 Thymeleaf 的注销代码:
  • 注销
  • 。点击链接后。注销链接仍然显示。

标签: spring-security


【解决方案1】:

使用 Spring 3.2 和 Java Config,他们更改了默认 URL/字段名称以防止信息泄漏(人们可以通过查看字段名称/URL 来确定您正在运行 Spring 应用程序 - 它涉及更改在这里简要介绍一下(尽管这仅提到了用户名/密码/等 - 没有明确指出注销,但我认为它已出于相同的原因进行了更改):http://docs.spring.io/spring-security/site/docs/3.2.0.RELEASE/reference/htmlsingle/#jc-httpsecurity

如果您更新链接以发布到/logout,它应该可以工作。

如果您查看类的源代码(单击 Java 代码配置),您将看到从您的配置调用的 logout() 方法位于 HttpSecurity.class 上,并且应用了类 LogoutConfigurer.class - 您可以在此处查看现在正在应用的默认匹配器:

public final class LogoutConfigurer<H extends HttpSecurityBuilder<H>> extends AbstractHttpConfigurer<LogoutConfigurer<H>,H> {
    private List<LogoutHandler> logoutHandlers = new ArrayList<LogoutHandler>();
    private SecurityContextLogoutHandler contextLogoutHandler = new SecurityContextLogoutHandler();
    private String logoutSuccessUrl = "/login?logout";
    private LogoutSuccessHandler logoutSuccessHandler;
    private RequestMatcher logoutRequestMatcher = new AntPathRequestMatcher("/logout", "POST");

(同样值得注意的是,POST 方法 - 另外,如果您没有禁用 CSRF 保护,那么您将需要提供 CSRF 字段以及任何帖子)

【讨论】:

  • 感谢您指出使用 POST 方法。由于某种原因,我错过了第 6.5.3 节。但在 4.2.4 中。注销处理。它说如下:“logout 元素通过导航到特定 URL 添加了对注销的支持。默认注销 URL 是 /j_spring_security_logout,但您可以使用 logout-url 属性将其设置为其他内容。有关其他可用属性的更多信息可以在命名空间附录中找到。”无论如何,我解决了这个问题。
  • 是的,我发现文档中缺少 3.2 更改的某些部分 - 我以前试图理解其中的一些内容,但在阅读中弹簧代码是最好的- 代码不会说谎!
  • 并且使用 eclipse/sts 很容易点击配置查看源代码 - 建议阅读 http 配置方法(如 logout())实际在做什么。
  • 感谢您分享您的建议。我刚刚向 SS 的现任负责人 Rob Winch 发送了一份说明,以在文档中添加迁移说明。
猜你喜欢
相关资源
最近更新 更多
热门标签