Spring Boot 集成 Spring Session 实现会话共享的核心是将 HttpSession 迁移至 Redis 集中式存储,依赖 spring-boot-starter-data-redis 和 spring-session-data-redis,配置 redis 连接与 session 参数,自动注册 SessionRepositoryFilter,使 session 操作透明读写 Redis。

Java 中 Spring Boot 集成 Spring Session 实现会话共享,核心是把原本存在单个 JVM 内存里的 HttpSession 迁移到 Redis 这类集中式存储中,让多个服务实例能读写同一份会话数据。整个过程对业务代码透明,不需改动 request.getSession() 或 session.setAttribute() 的写法。
添加关键依赖
项目需同时接入 Redis 客户端和 Spring Session 的 Redis 实现:
-
spring-boot-starter-data-redis:提供 Redis 连接与操作能力(基于 Lettuce,默认) -
spring-session-data-redis:桥接 Spring Session 与 Redis,自动注册SessionRepositoryFilter
Maven 示例:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
配置 Redis 连接与 Session 行为
在 application.yml 中设置基础参数:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
spring:
redis:
host: 127.0.0.1
port: 6379
password: your-pass # 如有密码需填写
database: 0
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
session:
store-type: redis # 显式声明,建议保留
timeout: 1800 # 单位秒,即30分钟空闲超时
redis:
namespace: myapp:sessions # 避免多环境 key 冲突
flush-mode: on_save # 响应提交时同步到 Redis,兼顾性能与一致性注意:spring.session.store-type=redis 在 Spring Boot 2.0+ 可省略,但显式配置更清晰可靠。
启用 Spring Session 自动管理
Spring Boot 2.4+ 版本通常无需额外注解——只要依赖和配置到位,springSessionRepositoryFilter 就会自动注册并生效。
如需自定义参数(例如调整超时或命名空间),可在启动类上添加:
@EnableRedisHttpSession( maxInactiveIntervalInSeconds = 1800, redisNamespace = "myapp:sessions" )
该注解会注入一个 Filter,拦截所有请求,用 Spring Session 包装后的 HttpSession 替换容器原生实现。后续所有 session.setAttribute()、getAttribute() 调用都会自动读写 Redis。
验证与关键注意事项
启动应用后,访问任意带会话操作的接口(如登录或存值),即可在 Redis 中查看形如 myapp:sessions:sessions:{sessionId} 的 Hash 结构。
- 存入 session 的对象建议实现
Serializable;否则默认 JDK 序列化会失败 - 如需可读性(如调试查看),可自定义
RedisSerializer改用 JSON 序列化 - 高并发场景下,务必调优 Lettuce 连接池参数(如
max-active、max-wait) - 不要同时启用 Tomcat 自身的 Session 复制机制(如
DeltaManager),避免冲突

















