Java Spring 4-会话管理
大家好 我目前正在公司内部运行一个部署在Tomcat8服务器上的企业级SpringWeb应用程序 现在,一些用户报告他们有时无法连接,因为登录页面上显示了登录错误 这就是为什么: 我的会话配置设置如下: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
<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分钟已经很长)
并发控制标签中删除错误:
<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>