升级到 Spring Boot 2.6 时 Spring Security 和 org.springdoc.ui.SwaggerConfig 之间的循环引用
Posted
技术标签:
【中文标题】升级到 Spring Boot 2.6 时 Spring Security 和 org.springdoc.ui.SwaggerConfig 之间的循环引用【英文标题】:circular reference between Spring Security and org.springdoc.ui.SwaggerConfig when upgrading to Spring Boot 2.6 【发布时间】:2022-01-17 22:41:47 【问题描述】:将我的应用程序从 Spring Boot 2.5 升级到 2.6 时,我收到此错误:
创建名为“securityConfig”的 bean 时出错:依赖关系不满足 通过方法'setContentNegotationStrategy'参数0表示;
嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建具有名称的 bean 时出错 'org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration': 通过方法“setConfigurers”表达的不满足的依赖关系 参数0;
嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为 'org.springdoc.ui.SwaggerConfig' 的 bean 时出错: 通过字段表示的不满足的依赖关系 'swaggerIndexTransformer';
嵌套异常是 org.springframework.beans.factory.BeanCurrentlyInCreationException: 创建名为 'org.springdoc.ui.SwaggerConfig' 的 bean 时出错: 请求的 bean 当前正在创建中:是否存在无法解析的问题 循环引用?
此错误记录在https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.6-Release-Notes#circular-references-prohibited-by-default 上,我知道我可以通过设置属性来“修复”它并返回 Spring Boot 2.5 行为。但如果我可以借此机会修复循环引用,我可能会为未来做好。
我的securityConfig
很简单,因为我的应用程序是一个公共应用程序,它向所有调用者返回一些 html 内容,无需身份验证。所以这是我的配置:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter
@Override
protected void configure(HttpSecurity security) throws Exception
//application is open to everyone - no security
security.httpBasic().disable();
错误提到的setContentNegotationStrategy
是WebSecurityConfigurerAdapter
中的一个方法,我没有覆盖它,所以我无法理解我需要做什么。
如果我删除了我的SecurityConfig
类,那么我仍然有一个错误,和以前一样,但没有提及我的SecurityConfig
类:
使用名称创建 bean 时出错 'org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration': 通过方法“setConfigurers”表达的不满足的依赖关系 参数0;
嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为 'org.springdoc.ui.SwaggerConfig' 的 bean 时出错: 通过字段表示的不满足的依赖关系 'swaggerIndexTransformer';
嵌套异常是 org.springframework.beans.factory.BeanCurrentlyInCreationException: 创建名为 'org.springdoc.ui.SwaggerConfig' 的 bean 时出错: 请求的 bean 当前正在创建中:是否存在无法解析的问题 循环引用?
处理 Spring Security 和 org.springdoc.ui.SwaggerConfig 之间似乎是循环引用的推荐方法是什么?
【问题讨论】:
【参考方案1】:问题是由org.springdoc.ui.SwaggerConfig
引起的。已由these changes 修复,在springdocs-openapi 1.5.13 中可用。
【讨论】:
以上是关于升级到 Spring Boot 2.6 时 Spring Security 和 org.springdoc.ui.SwaggerConfig 之间的循环引用的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 2.6 + 集成 - internalPublisherAnnotationBeanPostProcessor 循环依赖
Spring Cloud 2021.0.0 正式发布,第一个支持Spring Boot 2.6的版本!
滴滴将裁员15%涉及员工超2000人;Spring Boot 2.1.3 发布……