Spring Boot 2.6与Keycloak集成出现循环依赖该如何修复
循环依赖问题修复方案
该问题是Spring Boot 2.6.x默认关闭循环依赖自动处理,与Keycloak 15.x版本Spring Boot适配器的已知适配冲突导致,可通过以下任意方案解决:
方案一:快速兼容(无需修改代码)
直接在项目配置文件中开启循环依赖支持:application.properties配置:
spring.main.allow-circular-references=true
application.yml配置:
spring: main: allow-circular-references: true
该方案适配成本最低,适合紧急上线场景。
方案二:代码结构调整(符合Spring规范,推荐)
将KeycloakConfigResolver的Bean定义和Security配置类完全拆分,同时增加依赖顺序声明:
- 单独创建无继承的配置类注册Resolver Bean:
@Configuration public class KeycloakResolverConfig { @Bean public KeycloakConfigResolver keycloakConfigResolver() { return new KeycloakSpringBootConfigResolver(); } }
- 在Security配置类上添加
@DependsOn注解强制初始化顺序:
@Configuration @EnableWebSecurity @DependsOn("keycloakConfigResolver") public class KeycloakSecurityConfig extends KeycloakWebSecurityConfigurerAdapter { // 原有安全配置逻辑保持不变 }
方案三:依赖版本升级(长期解决方案)
Keycloak 16.0.0及以上版本已正式修复该适配问题,将Keycloak适配器BOM版本升级至16.0.0+即可直接解决问题,无需额外修改配置或代码。
注:若移除自定义Resolver后仍报错,是因为Keycloak自动配置逻辑仍会触发循环依赖,优先使用上述任一方案即可解决。
内容的提问来源于stack exchange,提问作者Cale W
相关产品推荐
相关产品推荐

