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

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

内容简介: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


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

查看所有标签

猜你喜欢:

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

在你身边,为你设计

在你身边,为你设计

腾讯公司用户研究与体验设计部 / 电子工业出版社 / 2013-1 / 69.00元

设计属于所有人,也意在为所有人使用,这既是设计的价值,也是设计的责任。本书内容包括:设计理念、设计方法、用户研究、体验设计、设计流程和工具,以及团队成长与管理等方面的知识与经验分享。一起来看看 《在你身边,为你设计》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器