Spring Boot3升级后无法自动注入FindByIndexNameSessionRepository
问题解决:Spring Boot 3.0.4 + Spring Security 6 下无法自动注入
FindByIndexNameSessionRepository 核心原因
Spring Boot 3.x 对应 Spring Session 3.x,会话存储的自动配置逻辑、依赖要求有细微调整,若依赖不全或配置冲突,会导致 FindByIndexNameSessionRepository 类型的 Bean 无法被自动创建。
分步解决方案
1. 验证依赖完整性
确保 pom.xml 中包含以下必要依赖(利用 Spring Boot 依赖管理自动匹配版本):
<!-- Redis 基础依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- Spring Session Redis 集成依赖 --> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
2. 统一配置方式
避免自动配置与显式注解冲突,二选一即可:
- 方式一:使用自动配置
在application.properties中保留会话存储类型配置,无需添加@EnableRedisHttpSession注解:spring.session.store-type=redis spring.data.redis.host=localhost spring.data.redis.port=6379 - 方式二:显式启用 Redis 会话
在配置类上添加@EnableRedisHttpSession,同时移除spring.session.store-type=redis属性:import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; import org.springframework.context.annotation.Configuration; @Configuration @EnableRedisHttpSession public class SessionConfig { }
3. 手动注册 Bean(自动配置失效时)
若上述步骤仍无法解决,手动创建 RedisIndexedSessionRepository(FindByIndexNameSessionRepository 的实现类)Bean:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.session.FindByIndexNameSessionRepository; import org.springframework.session.data.redis.RedisIndexedSessionRepository; import org.springframework.data.redis.connection.RedisConnectionFactory; @Configuration public class SessionConfig { @Bean public FindByIndexNameSessionRepository<?> redisSessionRepository(RedisConnectionFactory redisConnectionFactory) { RedisIndexedSessionRepository repository = new RedisIndexedSessionRepository(redisConnectionFactory); // 可选:自定义会话超时时间(单位:秒) repository.setDefaultMaxInactiveInterval(1800); return repository; } }
4. 检查 Redis 连接有效性
确认本地 Redis 服务已启动,且 application.properties 中的 Redis 配置与本地服务匹配,确保应用能正常连接 Redis(可通过启动日志排查连接异常)。
内容的提问来源于stack exchange,提问作者bjaklic
相关产品推荐
相关产品推荐

