【发布时间】: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 缺乏文档,这真的太耗时了)
【问题讨论】:
标签: session-timeout sessionid shiro subject