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

cdmah0mi  于 2023-10-20  发布在  Spring
关注(0)|答案(1)|浏览(128)

最近,我们开始使用spring redis session作为我们的会话管理器。我们的应用程序已经在生产环境中运行了8-10个月。有一个移动的应用程序使用此后端。
当我将会话存储库更改为spring session时,移动的应用程序中所有已登录的用户都将自动注销。然后他们将不得不再次登录。
是否有办法将所有已记录的用户会话迁移到Redis示例?

m0rkklqb

m0rkklqb1#

如果我理解正确的话,对实时迁移现有连接的答案是否定的,因为你正在改变后端连接。任何新用户都需要使用新的连接类示例化到应用程序的连接。根据我们在这里讨论的用户数量,可能会允许当前连接的用户在httpsession上运行,而所有新连接都在spring redis session下运行。这将涉及到Map所有现有的连接用户,使其留在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 annotation创建了一个名为springSessionRepositoryFilter的Spring Bean,它实现了Filter。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

相关问题