【发布时间】:2011-03-15 05:46:33
【问题描述】:
如何以优雅的方式通过 id 获取任何 http 会话或 Web 应用程序 (Java 2 EE) 中所有当前活动的 http 会话?
目前我有一个WebSessionListener,一旦创建了会话,我就把它放在ConcurrentHashMap() (map.put(sessionId, sessionObj)) 中,一切正常,我可以随时通过会话ID 从该映射中检索HTTP 会话,但它看起来像HttpSession 对象永远不会最终确定...即使会话无效,地图仍然引用无效的会话对象...我也读过this article,看起来WeakHashMap在我的情况下是不可接受的...
换句话说,我需要查看任何 HttpSession 甚至获取所有当前活动的 HttpSession 并从那里检索一些属性...
请给某人建议:)
更新
由于以下原因,我需要访问 HttpSession 对象:
有时用户执行一些操作/请求可能会影响另一个并发用户的工作,例如管理员应该禁用用户帐户,但该用户当前正在使用系统,在这种情况下,我需要向管理员显示一条消息,例如“用户 XXX 当前正在使用系统”因此我需要检查是否有任何持有用户 XXX 凭据的 HttpSession 已经存在并且处于活动状态。所以这就是为什么我需要这种可能性来获得任何 http 会话甚至所有会话。
我目前的实现是:知道所有会话(ConcurrentMap)的 SessionManager 和将会话放入/删除会话管理器的 HttpSessionListener。
我担心可能发生的内存问题,我想与某人讨论这个问题,但目前我清楚地看到一切都应该正常,因为当 sessionDestroyed() 方法将被调用时,所有无效的会话都将从映射中删除。 ..
非常感谢您的重播,但现在我明白问题只是想象 :)
【问题讨论】: