示例:我想限制一次登录只能有五个桌面会话和五个移动会话。因此,我在每个会话中都添加了一个标志,例如
request.getSession().setAttribute("Session-Type", "mobile");
现在,当任何用户登录时,我都希望对所有活动的移动/桌面会话进行计数,并基于该计数允许/禁止登录。我该如何完成?
我知道我可以使用
SessionRegistry
访问主体和/或他们的SessionInformation
,但不能访问实际的会话...编辑:我正在使用Hazelcast来存储会话,如果这有帮助
最佳答案
仅限于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"));
}