如何在Spring Boot 3中使用Spring Session Redis共享会话

云辰君_6502

云辰君_6502

2026-09-17

599人浏览

原创

spring boot 3 中必须使用 spring-session-data-redis + @enableredishttpsession 实现 session 共享,仅靠 spring-boot-starter-data-redis 无法接管 http 会话生命周期,否则 request.getsession() 仍走 tomcat 内存 session。

如何在spring boot 3中使用spring session redis共享会话

直接上结论:Spring Boot 3 中必须用 spring-session-data-redis + @EnableRedisHttpSession,不能只靠 spring-boot-starter-data-redis 自动配置 session 存储 —— 后者只管缓存,不管会话生命周期。

为什么加了 redis 依赖 session 还不共享?

常见现象是:本地启两个端口(如 8080/8081),登录后切端口就 404 或 session 属性丢失。根本原因是没启用 Spring Session 的 HTTP 会话代理机制。

Spring Boot 自动配置的 RedisConnectionFactoryRedisTemplate 只负责数据存取;而 session 共享需要 Spring Session 拦截 HttpServletRequest.getSession() 调用,把底层存储替换为 Redis。这一步必须显式开启。

  • spring-boot-starter-data-redis 提供的是「Redis 数据访问能力」
  • spring-session-data-redis 提供的是「HTTP Session 的 Redis 实现」
  • 缺后者,request.getSession() 仍走 Tomcat 默认内存 session,跟 Redis 完全无关

必须声明的依赖和注解

仅在 pom.xml 中添加以下两项(Spring Boot 3.x 已弃用 spring-session 的旧 groupId):

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载
<dependency><groupid>org.springframework.session</groupid><artifactid>spring-session-data-redis</artifactid></dependency><dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-data-redis</artifactid></dependency>

然后在任意 @Configuration 类上加:

@EnableRedisHttpSession(
  maxInactiveIntervalInSeconds = 1800,
  redisNamespace = "spring:session"
)
  • maxInactiveIntervalInSeconds 会覆盖 server.servlet.session.timeout,且单位是秒(不是毫秒)
  • redisNamespace 建议显式指定,避免多个应用共用 Redis 时 key 冲突
  • 不需要手动写 RedisHttpSessionConfiguration@EnableRedisHttpSession 已自动注册所有必要 Bean

application.yml 配置关键项

以下配置直接影响 session 是否能写入、读取、过期:

spring:
  session:
    store-type: redis
    timeout: 1800  # ⚠️ 此处单位是秒,但仅作 fallback;实际以 @EnableRedisHttpSession 的参数为准
  redis:
    host: localhost
    port: 6379
    database: 3     # 建议用非 0 库,避免和业务缓存混用
    password:
    timeout: 2000ms
    lettuce:
      pool:
        max-active: 8
        max-idle: 4
        min-idle: 0
  • spring.session.store-type: redis 是触发 Spring Session 自动配置的开关,缺它不会加载 Redis session 支持
  • database 必须和 @EnableRedisHttpSessionLettuceConnectionFactory 的配置一致(如果自定义了 factory)
  • 如果 Redis 有密码,spring.redis.password 必须填写,否则连接失败时日志里只有模糊的 Unable to connect,不报明文认证错误

容易被忽略的兼容性细节

Spring Boot 3 默认使用 Jakarta EE 9+,所以 session 相关类全部在 jakarta.servlet.http.* 包下。如果你的代码里还 import javax.servlet.http.HttpSession,编译会通过但运行时报 NoClassDefFoundError

  • 检查所有 import javax.servlet.http.* → 替换为 jakarta.servlet.http.*
  • HttpServletRequest.getSession() 返回的仍是 jakarta.servlet.http.HttpSession,无需改调用方式
  • 若项目中混用 Shiro 或老版 Security,需确认其 filter chain 是否兼容 Jakarta EE,否则 session 可能被跳过
  • Redis 中实际存储的 key 形如 spring:session:sessions:abc123...,value 是二进制序列化数据(默认用 JDK 序列化),调试时别指望直接 GET 出可读内容

真正麻烦的从来不是配对依赖或写对注解,而是当 session 看似“共享”了却在某些路径下失效——大概率是 filter 顺序错位、servlet context path 不一致,或者前端没传 Cookie(比如跨域请求没带 credentials: 'include')。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

redis session spring boot

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

2025.08.06

2071

22

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

2026.01.26

377

25

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

2023.10.17

580

4

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

2023.10.18

856

5

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

2025.08.19

1726

14

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

3949

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

3435

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

6072

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

583

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习