gpt4 book ai didi

java - Spring Session Data Redis - 从 Redis Store 获取有效 session 、当前用户

转载 作者:IT王子 更新时间:2023-10-29 05:56:30 25 4
gpt4 key购买 nike

我的问题是,在分布式 Web 应用程序中,是否可以使用 RedisOperationSessionRepository 从 Redis Store 获取有效 session 。 (我的意思是我不想编写明确的代码将其放入 Redis 存储然后再阅读它,我想了解框架或 spring-data-redis 库是否提供了)。

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

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

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

我可以尝试的功能之一是 Spring Session 1.1.0,Spring session 通过用户名查找。

  1. http://docs.spring.io/spring-session/docs/1.1.0.M1/reference/html5/guides/findbyusername.html
  2. https://spring.io/blog/2015/11/17/spring-session-1-1-0-m1-released

我试过了,它确实返回了有效的 session 结果,但问题是我仍然需要知道所有当前使用此应用程序的有效用户名。 (我不知道如何使用 Redis Store 获取它们,同样我可以存储在 Redis 中并获取它们,但我想知道是否有更好的方法)。

这是一段代码,如果我知道 session 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;
}
}
}

现在我可以使用上面的逻辑来获取所有当前用户,但我还是应该获取所有有效的 session ID,我不知道如何从 Redis 存储中获取这些 ID。

新更新: https://github.com/spring-projects/spring-session/issues/255在此链接中,我可能可以获得所有 session ID 并在 RedisOperationSessionRepository 中查找 Activity session ,但可能会导致性能问题。

我不确定我是否说清楚了,但是我们不能使用 spring session api 告诉 Redis 一些东西,只给我所有有效的 session 和他们当前登录的当前用户。(基于上次访问时间或类似的东西)。

谢谢

最佳答案

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

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

您可能应该考虑在支持关系查询的数据存储中记录用户 Activity ,将 Redis 保持为快速 session 存储。

关于java - Spring Session Data Redis - 从 Redis Store 获取有效 session 、当前用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35921919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com