Java Spring security遇到了“问题”;已超过此主体的最大会话数1&引用;

Java Spring security遇到了“问题”;已超过此主体的最大会话数1&引用;,java,spring-security,Java,Spring Security,我在SpringSecurity中使用会话管理来限制每个用户名的并发用户数 虽然它可以很好地工作,但在使用应用程序几分钟后没有注销,它会重定向到索引页,并且不允许同一用户再次登录。要再次登录,我需要重新运行应用程序 <session-management invalid-session-url="/index"> <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" /&

我在SpringSecurity中使用会话管理来限制每个用户名的并发用户数

虽然它可以很好地工作,但在使用应用程序几分钟后没有注销,它会重定向到索引页,并且不允许同一用户再次登录。要再次登录,我需要重新运行应用程序

  <session-management invalid-session-url="/index">
        <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
    </session-management> 
    <logout delete-cookies="JSESSIONID" />

如果使用此机制检测会话超时,如果用户注销,然后在不关闭浏览器的情况下重新登录,则可能会错误报告错误。这是因为当您使会话无效时,会话cookie不会被清除,即使用户已注销,也会重新提交。您可以在注销时显式删除JSESSIONID cookie,例如,在注销处理程序中使用以下语法:

  <http>
    <logout delete-cookies="JSESSIONID" />
  </http>

web.xml

<listener>
<listener-class>org.springframework.security.ui.session.HttpSessionEventPublisher</listener-class>
</listener>

org.springframework.security.ui.session.HttpSessionEventPublisher

不幸的是,这不能保证适用于每个servlet容器,因此您需要在您的环境中测试它

您使用了错误的类名(它来自过时的Spring Security版本)。您的
web.xml
应该包含

<listener>
  <listener-class>
     org.springframework.security.web.session.HttpSessionEventPublisher
  </listener-class>
</listener>

org.springframework.security.web.session.HttpSessionEventPublisher

这在手册的第三部分中有介绍,在.

一章中,同样没有帮助,但仍然遇到相同的问题,并且在加载应用程序时出现以下严重错误:异常:java.lang.IllegalStateException:ContainerBase.addChild:start:org.apache.catalina.LifecycleException:java.lang.IllegalArgumentException:java.lang.ClassNotFoundException:org.springframework.security.ui.session.HttpSessionEventPublisher
<listener>
<listener-class>org.springframework.security.ui.session.HttpSessionEventPublisher</listener-class>
</listener>
<listener>
  <listener-class>
     org.springframework.security.web.session.HttpSessionEventPublisher
  </listener-class>
</listener>