Shiro 在 2 分钟后重置会话
Posted
技术标签:
【中文标题】Shiro 在 2 分钟后重置会话【英文标题】:Shiro resets the session after 2 min 【发布时间】:2013-07-07 13:33:42 【问题描述】:我在我的 web 应用程序中使用 Apache Shiro。
我在会话中存储了一些参数,特别是存储在数据库中的对象的主键。
当用户登录时,我从数据库中加载对象并将主键保存在会话中。然后在应用程序中,用户可以编辑对象的数据并点击取消或保存按钮。
两个按钮都会触发一个 RPC,将更新的数据发送到服务器。然后使用存储在会话中的主键在数据库中更新对象。
如果用户在应用程序中保持活动状态(制作一些 RPC),一切正常。但是,如果他保持不活动状态 3 分钟并随后进行 RPC,那么 Shiro 的 securityUtils.getSubject().getSession()
将返回 null。
会话超时设置为 1,200,000 毫秒(20 分钟),所以我认为这不是问题所在。
当我浏览存储在会话管理器缓存中的会话时,我可以看到用户的会话 org.apache.shiro.session.mgt.SimpleSession,id=6de78f10-b58e-496c-b40a-e2a9a4ad069c
,但是当我尝试从 cookie 中获取会话 ID 并调用 SecurityUtils.getSecurityManager().getSession(key)
来获取会话时(其中key 是一个 SessionKey 实现):我得到一个异常。
当我尝试从会话 ID 构建新主题时,我丢失了会话中保存的所有属性。
我很高兴发布一些代码来帮助解决问题,但是我尝试了很多变通方法,以至于我不知道从哪里开始......所以请告诉我你需要什么。
或者,如果有人知道比 Shiro 更好的文档框架,我会全力以赴(Shiro 缺乏文档,这真的太耗时了)
【问题讨论】:
【参考方案1】:问题与 ini 文件中的会话配置有关。与 shiro 一样,顺序很重要,我的一些台词不合适。
以下是对我有用的配置:
sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO
#sessionDAO.activeSessionsCacheName = dropship-activeSessionCache
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
sessionManager.sessionDAO = $sessionDAO
# cookie for single sign on
cookie = org.apache.shiro.web.servlet.SimpleCookie
cookie.name = www.foo.com.session
cookie.path = /
sessionManager.sessionIdCookie = $cookie
# 1,800,000 milliseconds = 30 mins
sessionManager.globalSessionTimeout = 1800000
sessionValidationScheduler =
org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler
sessionValidationScheduler.interval = 1800000
sessionManager.sessionValidationScheduler = $sessionValidationScheduler
securityManager.sessionManager = $sessionManager
cacheManager = org.apache.shiro.cache.ehcache.EhCacheManager
securityManager.cacheManager = $cacheManager
【讨论】:
那么解决方法是什么?这从您的回答中并不明显,因为您没有解释您更改了什么或发布了原始配置。【参考方案2】:听起来你已经解决了你的问题。正如您所发现的,使用 Shiro INI 文件要记住的主要事情是顺序很重要;该文件是按顺序解析的,这实际上对于构造配置中使用的对象很有用。
既然你提到了 Shiro 缺乏文档,我想继续指出两个我发现在开始时很有帮助的教程: http://www.javacodegeeks.com/2012/05/apache-shiro-part-1-basics.html 和 http://www.ibm.com/developerworks/web/library/wa-apacheshiro/.
如果您环顾四周,还有很多其他博客文章提供了很好的信息来补充官方文档。
祝你好运!
【讨论】:
以上是关于Shiro 在 2 分钟后重置会话的主要内容,如果未能解决你的问题,请参考以下文章