将用户会话从 HttpSession 迁移到 Spring redis 会话(Spring MVC 应用程序)

问题描述 投票:0回答:1

最近我们开始使用 spring redis session 作为我们的会话管理器。 我们的应用程序已经在生产环境中运行了 8-10 个月。有一个使用此后端的移动应用程序。

当我将会话存储库更改为 Spring 会话时,移动应用程序中所有现有的登录用户将自动注销。然后他们将不得不再次登录。

有没有办法将所有现有的登录用户会话迁移到 Redis 实例?

spring spring-mvc spring-security spring-session
1个回答
1
投票

如果我理解正确的话,实时迁移现有连接的答案是否定的,因为您正在更改后端连接。任何新用户都需要使用新的连接类实例化与应用程序的连接。根据我们在这里讨论的用户数量,可能允许当前连接的用户在 httpsession 上运行,并允许所有新连接在 spring redis 会话上运行。将涉及映射所有现有连接用户以保持 httpsession 直到其连接耗尽或断开连接以及管理拆分以便新用户使用 redis 会话应用程序服务器的工作。

如果上述情况并非如此,并且您正在寻找使用 Spring Redis Session 的指南,那么:

首先,你需要有数据redis的spring session模块,可以在这里找到: https://github.com/spring-projects/spring-session

然后,您需要添加以下 Spring 配置:

@EnableRedisHttpSession 
public class Config {

    @Bean
    public LettuceConnectionFactory connectionFactory() {
        return new LettuceConnectionFactory(); 
    }

}

@EnableRedisHttpSession 注解创建一个名为 springSessionRepositoryFilter 的 Spring Bean,它实现了 Filter。该过滤器负责替换由 Spring Session 支持的 HttpSession 实现。在本例中,Spring Session 由 Redis 支持。 我们创建一个 RedisConnectionFactory 将 Spring Session 连接到 Redis 服务器。我们将连接配置为通过默认端口 (6379) 连接到本地主机。有关配置 Spring Data Redis 的更多信息,请参阅参考文档。

然后创建一个redis连接工厂:

class AppConfig {

  @Bean
  public LettuceConnectionFactory redisConnectionFactory() {

    return new LettuceConnectionFactory(new RedisStandaloneConfiguration("server", 6379));
  }
}

来源: https://docs.spring.io/spring-session/docs/current-SNAPSHOT/reference/html5/#httpsession-redis

https://docs.spring.io/spring-data/data-redis/docs/2.2.0.BUILD-SNAPSHOT/reference/html/#reference

© www.soinside.com 2019 - 2024. All rights reserved.