java – Spring会话数据Redis – 从Redis Store获取有效会话,当前用户

栏目: Java · 发布时间: 6年前

内容简介:Redis基本上是一个键值存储,不提供这样的查询功能.但是,您应该能够使用KEYS请求列出所有会话,然后在最后一个活动的基础上过滤它们,但是您提到的github问题中提到了缺点.您应该考虑在支持关系查询的数据存储中记录用户活动,将Redis保留为快速会话存储.
我的问题是,在分布式Web应用程序中,可以使用RedisOperationSessionRepository从Redis Store获取有效会话. (我的意思是我不想编写显式代码将它放入 Redis 存储区然后再读它,我想了解框架或 spring

-data-redis库是否提供了这个).

我知道Spring Redis能够恢复会话和服务器重启,如果会话仍然有效,也会保留登录(因为它由Redis支持)

我正在寻找的功能之一是获取当前在应用程序中的所有可能的登录用户.我知道SessionRegistryImpl和这个方法.但是我注意到这个方法没有Redis支持,并且在服务器重启后,不会返回登录用户.

public List<Object> getAllPrincipals() {
    return new ArrayList<Object>(principals.keySet());
}

我可以尝试的其中一个功能是Spring Session 1.1.0,Spring会话用户名查找.

> http://docs.spring.io/spring-session/docs/1.1.0.M1/reference/html5/guides/findbyusername.html

> https://spring.io/blog/2015/11/17/spring-session-1-1-0-m1-released

我试过,它确实返回了我有效的会话结果,但问题是我仍然需要知道使用此应用程序的所有当前有效用户名. (我不知道如何使用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,只要给我所有有效的会话及当前用户当前登录.(根据上次访问的时间或类似的东西)那).

谢谢

Redis基本上是一个键值存储,不提供这样的查询功能.

但是,您应该能够使用KEYS请求列出所有会话,然后在最后一个活动的基础上过滤它们,但是您提到的github问题中提到了缺点.

您应该考虑在支持关系查询的数据存储中记录用户活动,将Redis保留为快速会话存储.

翻译自:https://stackoverflow.com/questions/35921919/spring-session-data-redis-get-valid-sessions-current-user-from-redis-store


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Effective C++

Effective C++

[美]Scott Meyers / 侯捷 / 电子工业出版社 / 2006-7 / 58.00元

《Effective C++:改善程序与设计的55个具体做法》(中文版)(第3版)一共组织55个准则,每一条准则描述一个编写出更好的C++的方式。每一个条款的背后都有具体范例支撑。第三版有一半以上的篇幅是崭新内容,包括讨论资源管理和模板(templates)运用的两个新章。为反映出现代设计考虑,对第二版论题做了广泛的修订,包括异常(exceptions)、设计模式(design patterns)......一起来看看 《Effective C++》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

SHA 加密
SHA 加密

SHA 加密工具