
本文详解如何修复 Quarkus 2 中因缺失配置或依赖导致的 CompositeAuthenticationProvider 注入异常,重点涵盖 quarkus-oidc-client 依赖引入、必要 OIDC 客户端属性配置及常见陷阱。
本文详解如何修复 quarkus 2 中因缺失配置或依赖导致的 `compositeauthenticationprovider` 注入异常,重点涵盖 `quarkus-oidc-client` 依赖引入、必要 oidc 客户端属性配置及常见陷阱。
在 Quarkus 2.x 中使用 OpenAPI Generator 生成的 REST 客户端(尤其是启用了 OIDC 认证拦截器如 CompositeAuthenticationProvider)时,若运行时报错:
Error injecting gen.apis.project.external.v1.api.auth.CompositeAuthenticationProvider$OidcClientRequestFilterDelegateImpl0 gen.apis.project.external.v1.api.auth.CompositeAuthenticationProvider.oidcClientRequestFilterDelegate0
该错误并非源于 OpenAPI 配置本身(如 client-headers-factory 或 custom-register-providers),而是表明 Quarkus 容器无法成功实例化 OIDC 客户端相关组件——根本原因通常是:OIDC 客户端功能未被启用或未正确装配。
✅ 正确解决步骤
1. 添加必需依赖
确保 pom.xml 中已声明 quarkus-oidc-client(注意:不是 quarkus-oidc,后者用于服务端认证):
<dependency><groupid>io.quarkus</groupid><artifactid>quarkus-oidc-client</artifactid></dependency>
⚠️ 若误用
quarkus-oidc(服务端 OIDC)或完全遗漏此依赖,Quarkus 将无法解析OidcClientRequestFilterDelegateImpl等客户端专用 Bean,导致注入失败。
2. 配置 OIDC 客户端属性
在 application.properties 中至少设置以下基础客户端配置(根据你的 IDP 调整):
# 启用 OIDC 客户端(必需) quarkus.oidc-client.enabled=true # 指定 OIDC 提供商元数据地址(推荐) quarkus.oidc-client.auth-server-url=https://your-auth-server/auth/realms/your-realm # 或显式指定 token 端点(备选) # quarkus.oidc-client.token-path=/protocol/openid-connect/token # 客户端凭证(根据授权模式选择) quarkus.oidc-client.client-id=your-client-id quarkus.oidc-client.credentials.secret=your-client-secret
? 关键点:
quarkus.oidc-client.enabled=true是触发客户端扩展激活的开关;缺少它,即使依赖存在,相关 Bean 也不会被注册。
夸克扫描王 - 转Office Alibaba-Quark-Transoffice下载由夸克扫描王提供的文件格式转换工具。当用户需要将图片、截图或扫描件转换为 Office 文档(Word/Excel)或 PDF 时,使用此技能。适用于包含复杂表格、合同或图文混排内容的图片或扫描件,可尽量还原原始版式并生成可编辑文档。即使用户未明确提到格式转换,只要用户的需求涉及将图片内容转换为可编辑文档(如 .docx、.xlsx 或 .pdf),也应触发此技能。请勿用于提取纯文本或识别文字内容、图像增强处理或从零创建文档
3. 验证生成代码兼容性
确认 OpenAPI Generator 生成的 CompositeAuthenticationProvider 类确实依赖于 Quarkus OIDC 客户端机制(而非自定义实现)。若该类来自第三方库(如 org.tkit.quarkus.rs),请检查其版本是否与 Quarkus 2.x 兼容,并参考其文档确认是否需额外配置(例如 @RegisterForReflection 或显式 @Singleton 声明)。
4. (可选)排除干扰配置
你当前的 application.properties 中设置了:
quarkus.openapi-generator.codegen.spec.project_ext_v1_yaml.client-headers-factory=none
该配置会禁用默认请求头工厂,但不会影响 OIDC 拦截器注入。若需保留 OIDC 认证,建议改为:
quarkus.openapi-generator.codegen.spec.project_ext_v1_yaml.client-headers-factory=org.tkit.quarkus.rs.interceptor.OidcClientHeadersFactory
并确保该工厂类存在且兼容。
✅ 总结
该注入错误本质是 Quarkus 的 CDI 容器找不到 OidcClientRequestFilterDelegateImpl 的可用 Bean 实例。95% 的案例可通过两步解决:① 添加 quarkus-oidc-client 依赖;② 设置 quarkus.oidc-client.enabled=true 及基础认证参数。 无需修改 OpenAPI Generator 的 YAML 配置或自定义过滤器注册逻辑。部署前建议使用 ./mvnw quarkus:dev 启动并观察日志中是否出现 OidcClientRecorder 初始化信息,以验证客户端扩展已生效。











