使用Redis存储Session
pom依赖:
<!-- spring session 支持 -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.13.0</version>
</dependency>
spring-session-data-redis
是核心依赖库,会自动完成 Session 同步到 Redis 等操作redisson-spring-boot-starter
是需要用到的 Redis 客户端,提供很多分布式相关操作服务,操作 Session 数据的过程中,与核心依赖库搭配使用。
Session配置类:
@Configuration
// 原本使用@EnableSpringHttpSession
注解
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 300)
public class SpringHttpSessionConfig {
@Bean
public CookieSerializer cookieSerializer() {
DefaultCookieSerializer serializer = new DefaultCookieSerializer();
serializer.setCookieName("JSESSIONID");
// 用正则表达式配置匹配的域名,可以兼容 localhost、127.0.0.1 等各种场景
serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
serializer.setCookiePath("/");
serializer.setUseHttpOnlyCookie(false);
// 最大生命周期的单位是秒
serializer.setCookieMaxAge(24 * 60 * 60);
return serializer;
}
/* 在默认Session使用中,需要创建Session仓库来保存Session信息,而在Redis中被其代替,因此不需要再创建仓库
@Bean
public MapSessionRepository sessionRepository() {
return new MapSessionRepository(new ConcurrentHashMap<>());
}
*/
}
在使用 @EnableRedisHttpSession
时,可以通过 maxInactiveIntervalInSeconds
注解参数设置 Session 数据的过期失效时间,单位是秒。
如果不设置,系统默认是过期时间是 1800 秒(30 分钟)。