我在我的 web 应用程序中使用 Apache Shiro。
我在会话中存储了一些参数,特别是存储在数据库中的对象的主键。
当用户登录时,我从数据库中加载对象并将主键保存在会话中。然后在应用程序中,用户可以编辑对象的数据并点击取消或保存按钮。
这两个按钮都会触发一个 RPC,将更新的数据发送到服务器。然后使用存储在会话中的主键在数据库中更新对象。
如果用户在应用程序中保持活动状态(制作一些 RPC),一切正常。但是,如果他保持不活动状态 3 分钟并随后进行 RPC,那么 ShirosecurityUtils.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 缺乏文档,这真的太耗时了)