我的问题是,在分布式Web应用程序中,可以使用RedisOperationSessionRepository从Redis Store获取有效会话. (我的意思是我不想编写显式代码将它放入Redis存储区然后再读它,我想了解框架或
spring-data-redis库是否提供了这个).
我知道Spring Redis能够恢复会话和服务器重启,如果会话仍然有效,也会保留登录(因为它由Redis支持)
我正在寻找的功能之一是获取当前在应用程序中的所有可能的登录用户.我知道SessionRegistryImpl和这个方法.但是我注意到这个方法没有Redis支持,并且在服务器重启后,不会返回登录用户.
public List getAllPrincipals() {
return new ArrayList(principals.keySet());
}
我可以尝试的其中一个功能是Spring Session 1.1.0,Spring会话用户名查找.
我试过,它确实返回了我有效的会话结果,但问题是我仍然需要知道使用此应用程序的所有当前有效用户名. (我不知道如何使用Redis Store获取它们,我再次可以存储在Redis中并获取它们,但我想知道是否有更好的方法).
这是一段代码,如果我知道会话ID,这是我可以从当前使用该系统的众多用户中的一个获得当前用户的方式.
final Session session = redisOperationsSessionRepository.getSession(sessionid);
final Object obj = session.getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
if (obj instanceof SecurityContext) {
final SecurityContext context = (SecurityContext) obj;
final Authentication authentication = context.getAuthentication();
if (authentication != null) {
final Object principal = authentication.getPrincipal();
if (principal != null && principal instanceof CurrentUser) {
return (CurrentUser) principal;
}
}
}
现在我可以使用上面的逻辑来获取所有当前用户,但是我应该再次使用所有有效的会话ID,我不知道如何从Redis商店获取.
新更新:
https://github.com/spring-projects/spring-session/issues/255
在此链接中,我可能会获取所有会话ID并在RedisOperationSessionRepository中查找活动会话,但可能会导致性能问题.
我不确定我是否清楚自己,但是我们不能使用spring session api告诉Redis,只要给我所有有效的会话及当前用户当前登录.(根据上次访问的时间或类似的东西)那).
谢谢