Spring Boot——Spring Session Redis整合Spring Security时错误【RedisConnectionFactory is required】解决方案
问题描述
异常栈栈底
Caused by: java.lang.IllegalStateException: RedisConnectionFactory is requiredat org.springframework.util.Assert.state(Assert.java:76) ~[spring-core-5.2.11.RELEASE.jar:5.2.11.RELEASE]at org.springframework.data.redis.core.RedisAccessor.afterPropertiesSet(RedisAccessor.java:38) ~[spring-data-redis-2.3.5.RELEASE.jar:2.3.5.RELEASE]at org.springframework.data.redis.core.RedisTemplate.afterPropertiesSet(RedisTemplate.java:127) ~[spring-data-redis-2.3.5.RELEASE.jar:2.3.5.RELEASE]at org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration.createRedisTemplate(RedisHttpSessionConfiguration.java:291) ~[spring-session-data-redis-2.3.1.RELEASE.jar:2.3.1.RELEASE]at org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration.sessionRepository(RedisHttpSessionConfiguration.java:120) ~[spring-session-data-redis-2.3.1.RELEASE.jar:2.3.1.RELEASE]at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181]at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_181]at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_181]at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_181]at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.2.11.RELEASE.jar:5.2.11.RELEASE]... 121 common frames omitted
官方文档
https://docs.spring.io/spring-session/docs/current/reference/html5/index.html#spring-security-concurrent-sessions
问题分析
关键异常信息
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.session.data.redis.RedisIndexedSessionRepository]: Circular reference involving containing bean 'org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration' - consider declaring the factory method as static for independence from its containing instance. Factory method 'sessionRepository' threw exception; nested exception is java.lang.IllegalStateException: RedisConnectionFactory is requiredat org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.2.11.RELEASE.jar:5.2.11.RELEASE]at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:650) ~[spring-beans-5.2.11.RELEASE.jar:5.2.11.RELEASE]... 120 common frames omitted
关键的关键
Circular reference involving containing bean
HttpSessionListener的Bean和Spring Session Redis自动配置出来的Bean在同一个配置类中,导致循环引用。
例如:
/*** @author ShenTuZhiGang* @version 1.0.0* @date 2021-02-25 10:45*/
@Configuration
@EnableRedisHttpSession
public class CustomRedisHttpSessionConfig {@Autowiredprivate FindByIndexNameSessionRepository sessionRepository;/*** SpringSessionBackedSessionRegistry是session为Spring Security提供的* 用于在集群环境下控制会话并发的会话注册表实现类*/@Beanpublic SpringSessionBackedSessionRegistry sessionRegistry() {return new SpringSessionBackedSessionRegistry(sessionRepository);}/*** httpSession的会话监听,*/@Beanpublic HttpSessionEventPublisher httpSessionEventPublisher() {return new HttpSessionEventPublisher();}
}
解决方案
拆分
/*** @author ShenTuZhiGang* @version 1.0.0* @date 2021-02-25 10:45*/
@Configuration
@EnableRedisHttpSession
public class CustomRedisHttpSessionConfig {/*** httpSession的会话监听,*/@Beanpublic HttpSessionEventPublisher httpSessionEventPublisher() {return new HttpSessionEventPublisher();}
}
其他的放在 Spring Security 配置类中
参考文章
How to isolate spring boot app redis and spring boot session global redis
Spring Security集成Spring Session并存储session到Redis中,报错: Circular reference involving containing bean
Spring Boot——Spring Session Redis整合Spring Security时错误【RedisConnectionFactory is required】解决方案相关推荐
- Spring Boot Cache使用与整合
参考: 史上最全的Spring Boot Cache使用与整合 Spring Cache扩展:注解失效时间+主动刷新缓存 项目地址 使用本地Caffeine缓存 引入依赖包 <dependenc ...
- spring boot 1.5.4 整合redis、拦截器、过滤器、监听器、静态资源配置(十六)
上一篇:spring boot 1.5.4 整合webService(十五) 1 Spring Boot整合redis和缓存 Spring Boot中除了对常用的关系型数据库提供了优秀的自动 ...
- spring boot 1.5.4 整合 mybatis(十二)
上一篇:spring boot 1.5.4 整合log4j2(十一) Spring Boot集成Mybatis 更多更详细的配置参考文件:application.properties和<Spri ...
- Spring Boot之基于Redis实现MyBatis查询缓存解决方案
转载自 Spring Boot之基于Redis实现MyBatis查询缓存解决方案 1. 前言 MyBatis是Java中常用的数据层ORM框架,笔者目前在实际的开发中,也在使用MyBatis.本文主要 ...
- Spring Boot 学习之路之 Spring Security(二)加入mybatis
上一篇 Spring Security 基础配置: http://t.csdn.cn/m9oq5 在上文Spring Boot 学习之路之 Spring Security(一)中完成了 ...
- Spring Boot (三)集成spring security
项目GitHub地址 : https://github.com/FrameReserve/TrainingBoot Spring Boot (三)集成spring security,标记地址: htt ...
- 响应式久草编程基础教程:久草Spring Boot 与 Lettuce 在线整合
本文主要介绍响应式编程访问 Redis,以及 Spring Boot 与 Lettuce 的整合使用. Lettuce 是可扩展性线程安全的 Redis 客户端,用于同步.异步和响应式使用.如果多个线 ...
- spring boot 分布式session实现
spring boot 分布式session实现 主要是通过包装 HttpServletRequest 将 session 相关的方法进行代理. 具体是的实现就是通过 SessionRepositor ...
- Spring Boot中使用Redis数据库
Spring Boot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多NoSQL数据库一样提供了自动化配置的支持,包括:Redis, MongoDB, Elasticsearch, So ...
最新文章
- poj3169(差分约束+SPFA)
- 利用.net4.0的dynamic特性制造的超级简单的微信SDK
- 关于 SAP UI5 对服务器端渲染 Server Sider Render 的支持问题
- login组件的两种用法_Android-模块化、组件化、插件化、热修复-组件化-组件间的通信(本地,下沉,bus,路由)...
- redis中不同value类型的存取操作方式
- Python 正则表达式(一)
- html 音乐能连续播放吗,音乐在不同HTML页面的连续播放问题
- 如何应对冬季暴涨的体重
- CAM350自动开短路检查教程
- 黄色量能通达信指标公式!没有未来函数,不加密的副图指标!
- 浅析Promise的then方法
- 编译原理-LL(1)语法分析器
- 将接近传感器和环境光传感器封装在一起的优点
- unity——删除父物体下面的所有子物体
- 利用java查看本机的cpu、内存情况
- python自动控制原理_自动控制原理(山东联盟-中国石油大学(华东))知到答案2020年MOOCPython语言程...
- 西瓜直播弹幕阅读器 python
- 【c#】键盘事件(keypress keydown keyup)
- win7 matlab 读 grib2数据
- DreamPlan Plus for Mac(家装和景观设计软件)
热门文章
- C# Winform只能输入数字的TextBox---补充
- 正则表达式校验例子[原创]
- 我的世界1.7.10java下载安装_我的世界1.7.10正式版
- pptx和ppt计算机二级,计算机二级Ms office考试PPT考点总结.pptx
- 智能J IDEA键盘快捷键
- matlab 轴旋转图像,求助,二维图像如何绕轴旋转成为三维图像
- mysql sqlite 分页查询_php基于SQLite实现的分页功能示例
- mysql scws_php利用scws实现mysql全文搜索功能的方法,_PHP教程
- l2的最优回归_【机器学习】逻辑回归(非常详细)
- nvidia-smi:Failed to initialize NVML: Driver/library version mismatch