首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >春季4-会议管理

春季4-会议管理
EN

Stack Overflow用户
提问于 2016-06-24 05:16:33
回答 2查看 1.4K关注 0票数 1

大家好,

我目前正在我们公司内运行一个部署在tomcat 8服务器上的企业spring web应用程序。

现在,一些用户报告说,有时他们无法连接登录-错误显示在登录页面。

这就是为什么:

我的会话配置设置如下:

代码语言:javascript
复制
<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小时:

代码语言:javascript
复制
<session-timeout>240</session-timeout> 
  • 当用户请求登录页面时,带有csfr令牌的会话存储在服务器端。
  • 当用户注销时,他的会话无效,并且他被重定向到登录页面,因为带有csfr令牌的新会话再次存储在服务器端。
  • 当用户已经有5个会话(不同的浏览器、设备、怪异的客户端行为)并尝试第6次登录时--登录被拒绝,因为会话最大值超过了。

现在,在最坏的情况下,有5个会话,只有csrf令牌存储服务器端,比方说一个avg。寿命为3小时,阻止用户再次连接。

拜托,有人能告诉我有比以下更好的解决办法吗?

代码语言:javascript
复制
max-sessions="biggerNumber" 

谢谢你的阅读..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-24 11:34:32

你有两种可能性可以结合起来:

  • 增加并发会话的数量
  • 减少会话超时(30分钟已经很大了)

但是,您还有一种更激进的方法:更改策略,以便不拒绝新连接,而是撤消最老的连接。通过spring安全性,允许从error-if-maximum-exceeded="true"标签中删除concurrency-control

代码语言:javascript
复制
<session-management>
    <concurrency-control max-sessions="5" 
        expired-url="/login" 
        session-registry-alias="sessionRegistry"/>
</session-management>
票数 3
EN

Stack Overflow用户

发布于 2016-06-24 10:48:33

我查看了下面的春季文档并进行了测试。

http://docs.spring.io/spring-security/site/docs/current/reference/html/session-mgmt.html#concurrent-sessions

事实证明,您必须将此添加到web.xml中。

代码语言:javascript
复制
<listener>
    <listener-class>
    org.springframework.security.web.session.HttpSessionEventPublisher
    </listener-class>
</listener>

此侦听器将在注销时删除连接到主体实例的会话。否则,即使在注销之后,会话仍然连接到主体实例。这就是为什么您将得到错误“这个主体超过了XX的最大会话”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38006040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档