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

本文探讨在分布式Web应用中如何利用Spring Data Redis和Spring Session管理会话,特别是如何从Redis存储中获取有效会话以及当前登录用户。尽管Spring Redis能恢复会话并保持登录状态,但作者寻求一种不需手动存取Redis即可获取所有当前登录用户的方法。目前的解决方案包括使用Spring Session API获取会话ID,并通过RedisOperationSessionRepository查找活动会话,但这种方法可能存在性能问题。
摘要由CSDN通过智能技术生成

我的问题是,在分布式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,只要给我所有有效的会话及当前用户当前登录.(根据上次访问的时间或类似的东西)那).

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值