帮助大家,
我目前在部署在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-token存储服务器端,让我们说平均值。寿命为3小时,阻止用户再次连接。
拜托,有人可以告诉我,有一个更好的解决方案:
max-sessions="biggerNumber"
无论如何,感谢阅读...
答案 0 :(得分:3)
您可以将两种可能性结合起来:
但是你也有一种更激进的方式:改变策略,以便不拒绝新连接,但撤销最旧的连接。弹出安全性允许开箱即用,只需从error-if-maximum-exceeded="true"
标记中删除concurrency-control
:
<session-management>
<concurrency-control max-sessions="5"
expired-url="/login"
session-registry-alias="sessionRegistry"/>
</session-management>
答案 1 :(得分:0)
我检查了下面的弹簧文档并进行了测试。
事实证明你必须在web.xml中添加它
<listener>
<listener-class>
org.springframework.security.web.session.HttpSessionEventPublisher
</listener-class>
</listener>
此注册器将在注销时删除连接到主体实例的会话。否则,即使在注销后,会话仍然连接到主体实例。这就是为什么你会继续得到错误“超过此委托人的XX的最大会话数”。