【发布时间】:2016-10-26 15:20:12
【问题描述】:
大家好,
我目前正在我们公司内部运行一个部署在 tomcat 8 服务器上的企业 Spring Web 应用程序。
现在,一些用户报告说有时他们无法连接,因为登录页面上显示了登录错误。
嗯,这就是为什么:
我的会话配置是这样设置的:
<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"/>
会话超时设置为 4 小时:
<session-timeout>240</session-timeout>
- 当用户请求登录页面时,带有 csfr 令牌的会话存储在服务器端。
- 当用户注销时,他的会话无效并被重定向到登录页面,因为带有 csfr-token 的新会话再次存储在服务器端。
- 当用户已经有 5 个会话(不同的浏览器、设备、奇怪的客户端行为)并尝试第 6 次登录时 - 登录被拒绝,因为超出了会话最大值。
现在在最坏的情况下,有 5 个会话,只有 csrf-token 存储在服务器端,假设是 avg。 3小时的生命周期,阻止用户再次连接。
请告诉我有比以下更好的解决方案:
max-sessions="biggerNumber"
感谢您的阅读...
【问题讨论】:
标签: java spring session tomcat spring-security