大家好,
我目前正在我们公司内运行一个部署在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> 现在,在最坏的情况下,有5个会话,只有csrf令牌存储服务器端,比方说一个avg。寿命为3小时,阻止用户再次连接。
拜托,有人能告诉我有比以下更好的解决办法吗?
max-sessions="biggerNumber" 谢谢你的阅读..。
发布于 2016-06-24 11:34:32
你有两种可能性可以结合起来:
但是,您还有一种更激进的方法:更改策略,以便不拒绝新连接,而是撤消最老的连接。通过spring安全性,允许从error-if-maximum-exceeded="true"标签中删除concurrency-control:
<session-management>
<concurrency-control max-sessions="5"
expired-url="/login"
session-registry-alias="sessionRegistry"/>
</session-management>发布于 2016-06-24 10:48:33
我查看了下面的春季文档并进行了测试。
http://docs.spring.io/spring-security/site/docs/current/reference/html/session-mgmt.html#concurrent-sessions
事实证明,您必须将此添加到web.xml中。
<listener>
<listener-class>
org.springframework.security.web.session.HttpSessionEventPublisher
</listener-class>
</listener>此侦听器将在注销时删除连接到主体实例的会话。否则,即使在注销之后,会话仍然连接到主体实例。这就是为什么您将得到错误“这个主体超过了XX的最大会话”。
https://stackoverflow.com/questions/38006040
复制相似问题