Java Spring 4-会话管理

Java Spring 4-会话管理,java,spring,session,tomcat,spring-security,Java,Spring,Session,Tomcat,Spring Security,大家好 我目前正在公司内部运行一个部署在Tomcat8服务器上的企业级SpringWeb应用程序 现在,一些用户报告他们有时无法连接,因为登录页面上显示了登录错误 这就是为什么: 我的会话配置设置如下: <session-management> <concurrency-control max-sessions="5" error-if-maximum-exceeded="true" expired-url="/login" sess

大家好

我目前正在公司内部运行一个部署在Tomcat8服务器上的企业级SpringWeb应用程序

现在,一些用户报告他们有时无法连接,因为登录页面上显示了登录错误

这就是为什么:

我的会话配置设置如下:

<session-management>
    <concurrency-control max-sessions="5" 
        error-if-maximum-exceeded="true" expired-url="/login" 
        session-registry-alias="sessionRegistry"/>
</session-management>

<form-login login-processing-url="/login" 
    login-page="/login" 
    authentication-failure-url="/login_error" />

<logout logout-url="/logout" logout-success-url="/login" 
    invalidate-session="true"/> 

感谢您阅读…

我查看了下面的spring文档并进行了测试

事实证明,您必须将其添加到web.xml中

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

org.springframework.security.web.session.HttpSessionEventPublisher

此侦听器将在注销时删除连接到主体实例的会话。否则,即使在注销之后,会话仍然连接到主体实例。因此,这就是为什么您会不断收到错误“超过了此主体的XX最大会话数”。

您有两种可能可以组合:

  • 增加并发会话的数量
  • 减少会话超时(30分钟已经很长)
但您还有一个更激进的方法:更改策略,以便不拒绝新连接,而是撤销最旧的连接。spring security允许它开箱即用,如果超过最大值=“true”只需从
并发控制标签中删除
错误:

<session-management>
    <concurrency-control max-sessions="5" 
        expired-url="/login" 
        session-registry-alias="sessionRegistry"/>
</session-management>

您好,非常感谢您的回复。这正是我想要的。如果超过最大值,我将删除错误,因此最早的会话将被撤销。我在阅读安全文档时没有弄明白这一点,所以感谢您把这一点讲清楚!会话超时确实非常大,但请求是这样的。
<listener>
    <listener-class>
    org.springframework.security.web.session.HttpSessionEventPublisher
    </listener-class>
</listener>
<session-management>
    <concurrency-control max-sessions="5" 
        expired-url="/login" 
        session-registry-alias="sessionRegistry"/>
</session-management>