【问题标题】:Does acegi use a different session from Spring?acegi 是否使用与 Spring 不同的会话?
【发布时间】:2011-06-11 01:39:16
【问题描述】:

我一直在编写一个 Web 应用程序,它只会为每个用户创建一个会话。到目前为止,这运作良好。但是,我遇到了一个问题,如果我有一个用户注销,Spring 认为该用户仍然登录。我在注销时使与 acegi 的会话无效,但似乎 Spring 无法识别:

    <security:logout invalidate-session="true"
                success-handler-ref="logout"
                logout-url="/logout.html" />

所以,我的问题是:是否存在我必须无效的单独春季会议,如果是这种情况,我应该怎么做?

提前致谢。 镜像命运

【问题讨论】:

  • 出于调试目的,您可以添加HttpSessionListener 以记录会话何时结束(或执行其他类似操作)

标签: java spring spring-security


【解决方案1】:

如果您询问 Acegi 和 SpringMVC 是否使用相同的会话,那么答案是肯定的,它们确实使用了。您可能希望手动使处理 /logout.html 的控制器中的会话无效。

更新

正如 OP 在下面的评论中提到的,要使身份验证对象无效,请使用:

SecurityContextHolder.getContext().setAuthentication(null);

【讨论】:

  • 感谢您的回答!我做了更多的研究,最终发现虽然他们有相同的会话,但 Spring 有一个身份验证令牌,当 acegi 使会话无效时,它不会“无效”。因此,我不得不添加这行代码:SecurityContextHolder.getContext().setAuthentication(null);到我的注销功能。我会将此答案标记为正确(毕竟它确实回答了我的问题)。如果您想将该行代码添加到您的答案中,它可能会对处于类似情况的其他人有所帮助。
猜你喜欢
  • 2013-01-13
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 2011-07-21
  • 2020-03-28
  • 1970-01-01
  • 2011-02-06
  • 2013-12-01
相关资源
最近更新 更多