据我所知 error-if-maximum-exceeded 属性应该是 false 。将值设置为 false 将导致原始会话过期而不是抛出异常,如中所述 http://docs.spring.io/spring-security/site/docs/3.0.x/reference/appendix-namespace.html#d0e7768
error-if-maximum-exceeded
false
我发现这是使用之间的冲突 <session-management> 在我的配置和我的servlet容器中。我正在使用STS 3.5(用于Spring项目的自定义Eclipse)和在IDE中运行的vFabric服务器。该 参考文档 在实际的会话管理部分(第8节)中没有提到这一点。然而,埋在第4节的auth是这个小宝石:
<session-management>
请注意,如果您使用此机制来检测会话超时,则可能会错误地报告错误,如果用户注销,然后在不关闭浏览器的情况下重新登录。这是因为当您使会话无效时,会话cookie不会被清除,即使用户已注销,也会重新提交。您可以在注销时显式删除JSESSIONID cookie,例如在注销处理程序中使用以下语法:
<http> <logout delete-cookies="JSESSIONID" /> </http>
不幸的是,这不能保证与每个servlet容器一起使用,因此您需要在您的环境中对其进行测试
好吧,显然它在STS 3.5中不起作用
起初我试图消除我的部分 <session-management> 标记,所以我可以控制并发(即让用户只能一次登录一个会话)。但是,我一直在犯错误。
所以,在这一点上,我已经完全删除了会话管理的东西,并在准备部署时回到它。