将用户会话从HttPsession迁移到Spring Redis会话(Spring MVC应用)

时间:2019-07-17 12:05:42

标签: spring spring-mvc spring-security spring-session

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

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

总有没有将所有现有的登录用户会话迁移到Redis实例。

1 个答案:

答案 0 :(得分:0)

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

如果不是上述情况,并且您正在寻找使用Spring Redis Session的指南,则:

首先,您将需要具有数据redis的spring会话模块,可以在这里找到: 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 Server。我们将连接配置为在默认端口(6379)上连接到localhost。有关配置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