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

时间:2018-08-23 06:38:16

标签: java spring spring-security hazelcast spring-session

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

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

现在,当任何用户登录时,我都希望对所有活动的移动/桌面会话进行计数,并基于该计数允许/禁止登录。 我该如何做到?

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

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

1 个答案:

答案 0 :(得分: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"));
}