我怎样才能获得所有开放的会话?

Posted

技术标签:

【中文标题】我怎样才能获得所有开放的会话?【英文标题】:How can I get all open sessions? 【发布时间】:2013-12-22 09:16:00 【问题描述】:

我正在使用 Spring Security,我想遍历所有打开的会话并使用 HttpSession.setMaxInactiveInterval(timeout); 更改超时

我考虑过使用SessionRegistry.getAllSessions(),但它只返回SessionInformation 实例而不是HttpSession 对象。

【问题讨论】:

【参考方案1】:

Spring Security 中没有任何东西可以做到这一点 - 正如您所观察到的,SessionRegistry 不保留 HttpSession 实例。

因此,您必须维护自己的活动会话图,使用HttpSessionListener 记录会话创建和销毁(与your question from yesterday 的答案中描述的差不多。

它可能是Map<String,HttpSession>,其中键是会话 ID。

然后,您可以随时迭代该映射并修改会话对象。不要忘记使用线程安全映射并在会话过期时删除它们(在sessionDestroyed 方法中)。

【讨论】:

@Luke Taylor 的答案应该被标记为答案。这就是这样做的方法,并且有效。 baeldung.com/spring-security-track-logged-in-users 也很好地概述了如何实现这一点

以上是关于我怎样才能获得所有开放的会话?的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能在Laravel中获得cookie?

怎样才能强制 Rust 获得分配的内存的所有权,而不是通过其安全方法分配的内存?

我怎样才能获得每个国家的最大值

sh 我怎样才能获得当前的工作目录?

我怎样才能获得倒排索引?

我怎样才能获得上一个网址的路径?