Spring Boot:迭代和评估所有(活动)会话

Posted

技术标签:

【中文标题】Spring Boot:迭代和评估所有(活动)会话【英文标题】:Spring Boot: Iterate and evaluate all (active) sessions 【发布时间】:2019-01-29 11:20:17 【问题描述】:

示例:我想限制一次登录,例如,五个桌面会话和五个移动会话。因此,我为每个会话添加了一个标志,例如

request.getSession().setAttribute("Session-Type", "mobile");

现在,当任何用户登录时,我想计算所有活动的移动/桌面会话,并根据该计数允许/禁止登录。 我该如何做到这一点?

我知道我可以使用 SessionRegistry 访问 Principals 和/或他们的 SessionInformation,但不能访问实际会话...

编辑:我正在使用 Hazelcast 来存储会话,如果这有帮助的话

【问题讨论】:

【参考方案1】:

仅适用于 Hazelcast:

@Autowired
private HazelcastInstance hazelcastInstance;

// ...

// from org.springframework.session.hazelcast.HazelcastSessionRepository
final Collection<Session> sessions = (Collection) hazelcastInstance.getMap(HazelcastSessionRepository.DEFAULT_SESSION_MAP_NAME).values();
for(final Session session : sessions) 
  System.out.println(session.getId() + ": " + session.getAttribute("Session-Type"));

【讨论】:

以上是关于Spring Boot:迭代和评估所有(活动)会话的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot redis:如何使用户的所有会话无效?

了解 Keycloak Adapter(Spring-Security 和 Spring Boot)会话要求

对其他 Spring Boot 应用程序的集中会话管理

如何在 bean 实例化之前记录 Spring Boot 应用程序的所有活动属性?

Spring-security:即使在 JVM 重启后也能保持活动会话

单击注销时如何从所有活动会话中注销?