Spring Boot——Spring Session Redis整合Spring Security时错误【RedisConnectionFactory is required】解决方案 叁歲伎倆 2022-11-09 12:58 158阅读 0赞 # 问题描述 # 异常栈栈底 Caused by: java.lang.IllegalStateException: RedisConnectionFactory is required at 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][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 required at 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 { @Autowired private FindByIndexNameSessionRepository sessionRepository; /** * SpringSessionBackedSessionRegistry是session为Spring Security提供的 * 用于在集群环境下控制会话并发的会话注册表实现类 */ @Bean public SpringSessionBackedSessionRegistry sessionRegistry() { return new SpringSessionBackedSessionRegistry(sessionRepository); } /** * httpSession的会话监听, */ @Bean public HttpSessionEventPublisher httpSessionEventPublisher() { return new HttpSessionEventPublisher(); } } # 解决方案 # 拆分 /** * @author ShenTuZhiGang * @version 1.0.0 * @date 2021-02-25 10:45 */ @Configuration @EnableRedisHttpSession public class CustomRedisHttpSessionConfig { /** * httpSession的会话监听, */ @Bean public 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 Security_Spring Session_session_Redis_ Circular reference involving containing bean] [https_docs.spring.io_spring-session_docs_current_reference_html5_index.html_spring-security-concurrent-sessions]: https://docs.spring.io/spring-session/docs/current/reference/html5/index.html#spring-security-concurrent-sessions [How to isolate spring boot app redis and spring boot session global redis]: https://stackoverflow.com/questions/47965495/how-to-isolate-spring-boot-app-redis-and-spring-boot-session-global-redis [Spring Security_Spring Session_session_Redis_ Circular reference involving containing bean]: https://www.codeleading.com/article/92042351057/
还没有评论,来说两句吧...