Spring Security Max登录会话

时间:2010-01-04 06:39:55

标签: spring-security

我的j2ee应用程序使用spring security存在问题。我将并发会话控制中的max-sessions设置为1.现在,当我第二次尝试登录它会阻止我时,它工作正常。但是当我退出另一个并尝试再次登录时,我仍然收到同样的消息。

您的登录尝试失败,请重试。 原因:此主体的最大会话数超过

我在我的http安全

中有这个
 <security:logout logout-url="/logout.do"
  invalidate-session="true" logout-success-url="/logoutSuccess.do" />
 <security:concurrent-session-control
  max-sessions="1" exception-if-maximum-exceeded="true" expired-url="/loginform.do" />

3 个答案:

答案 0 :(得分:7)

自从您发布此内容已经有一段时间了,但如果其他人遇到此问题,我相信如果您不在您的web.xml中添加org.springframework.security.web.session.HttpSessionEventPublisher作为侦听器,则会发生此行为。

请参阅here

将侦听器添加到web.xml会导致每次HttpSession开始或终止时都将ApplicationEvent发布到Spring ApplicationContext。这很关键,因为它允许在会话结束时通知SessionRegistryImpl。没有它,用户一旦超出会话限额就永远无法再次登录,即使他们退出其他会话或超时也是如此。

答案 1 :(得分:0)

请检查错误页面是否未缓存(按F5)并查看日志以查看注销是否正常。

答案 2 :(得分:0)

  1. 确保您的Spring Security过滤器在Struts过滤器之前运行。
  2. 在Spring Security的LogoutFilter.doFilterHttp方法中设置断点。确保部件正常运行。