1.7. 影响与早期版本兼容性的更改
这部分论述了红帽构建的 Quarkus 3.2 中的更改,它会影响与之前产品版本构建的应用程序的兼容性。
查看这些破坏的变化,并执行必要的步骤,以确保应用程序在将其更新至 Quarkus 3.2 的红帽构建后继续运行。
要自动执行许多这些更改,请使用 quarkus update 命令将项目更新至最新的红帽构建的 Quarkus 版本。
1.7.1. 云 复制链接链接已复制到粘贴板!
Kubernetes 客户端已从 5.12 升级到 6.7.2。如需更多信息,请参阅 Kubernetes 客户端 - 从 5.x 迁移到 6.x 指南。
1.7.1.2. 改进了生成基于 TLS 的容器端口的逻辑 复制链接链接已复制到粘贴板!
Red Hat build of Quarkus 3.2 引入了 Kubernetes 扩展如何生成基于 TLS 的容器端口的更改。
早期版本会自动将名为 https 的容器端口添加到生成的部署资源。这个方法可能会造成问题,特别是在没有配置 SSL/TLS 时,导致端口无法正常工作。
在 3.2 及更高版本中,Kubernetes 扩展默认不添加名为 https 的容器端口。只有在执行以下步骤时,才会添加容器端口:
-
您可以在
applicationprerequisites 属性。.properties文件中指定任何相关的 quarkus.http.ssl -
您可以在
application.properties文件中设置quarkus.kubernetes.ports.https.tls=true。
1.7.1.3. 删除一些 Kubernetes 和 OpenShift 属性 复制链接链接已复制到粘贴板!
在这个版本中,一些之前已弃用的 Kubernetes 和 OpenShift 相关的属性已被删除。使用新的对应项替换它们。
| 删除的属性 | 新属性 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
另外,在这个版本中,没有 quarkus. 前缀的属性将被忽略。例如,在这个版本之前,如果您添加了 kubernetes.name 属性,它被映射到 quarkus.kubernetes.name。为了避免异常,如从 2.16.0.Final 升级到 2.16.1 时java.lang.ClassCastException。Final #30850 将不再进行。
当您继续在 Quarkus 上下文中使用 Kubernetes 和 OpenShift 时,请使用新属性,并在需要时包含 quarkus. 前缀。
1.7.2. Core 复制链接链接已复制到粘贴板!
1.7.2.1. 升级到 Jandex 3 复制链接链接已复制到粘贴板!
在这个版本中,Jandex 成为 SmallRye 项目的一部分,将所有 Jandex 项目整合到单个存储库中: https://github.com/smallrye/jandex/。因此,Jandex Maven 插件的新版本随 Jandex 内核一起提供。
此发行版本还会更改 Maven 协调。将旧的协调替换为新协调。
| 旧协调 | 新协调 |
|
|
|
|
|
|
如果使用 Maven Enforcer 插件,请将其配置为对 org.jboss:jandex 的任何依赖项。Gradle 用户提供了一个等同的插件。
1.7.2.2. Jandex API 用户的迁移路径 复制链接链接已复制到粘贴板!
Jandex 3 包含很多有趣的功能和改进。不幸的是,这些更改需要一些破坏的更改。以下是推荐的迁移路径:
-
升级到 Jandex 2.4.3.Final。此版本为 Jandex 3.0.0 中更改的一些方法提供了替换。例如,不使用
ClassInfo.annotations (),使用annotationsMap (),并将MethodInfo.parameters ()替换为parameterTypes ()。使用 Jandex 标记为已弃用的任何方法停止。 -
确保不使用 return 值
Indexer.index ()或indexClass ()。 -
如果您根据 Jandex 2.4.3.Final 编译代码,它可以针对 2.4.3.Final 和 3.0.0 运行。然而,这有一些例外。如果您实现
IndexView接口,或者在某些情况下,依赖UnresolvedTypeVariable类,则无法使项目与 Jandex 2.4.3 和 Jandex 3 兼容。 -
升级到 Jandex 3.0.0.如果您实施
IndexView接口,请确保实施添加的方法。如果您广泛使用 JandexType层次结构,请验证是否需要处理TypeVariableReference,它现在用来代表递归类型变量。
在此发行版本中,Jandex 引入了一个新的文档站点。尽管它是正在进行的工作,但随着时间的推移将变得更加全面。如需更多信息,您还可以参考改进的 Jandex Javadoc。
1.7.2.3. 删除 io.quarkus.arc.config.ConfigProperties 注解 复制链接链接已复制到粘贴板!
在这个版本中,之前弃用的 io.quarkus.arc.config.ConfigProperties 注解已被删除。
反之,使用 io.smallrye.config.ConfigMapping 注解来注入多个相关的配置属性。
如需更多信息,请参阅 "Mapping configuration to objects" 指南中的 @ConfigMapping 部分。
1.7.2.4. 现在,在私有方法上声明的拦截器绑定注解会生成构建失败 复制链接链接已复制到粘贴板!
在这个版本中,不支持在私有方法上声明拦截器绑定注解,并触发构建失败;例如:
jakarta.enterprise.inject.spi.DeploymentException: @Transactional does not affect method com.acme.MyBean.myMethod() because the method is private. [...]
jakarta.enterprise.inject.spi.DeploymentException: @Transactional does not affect method com.acme.MyBean.myMethod() because the method is private. [...]
在早期版本中,声明私有方法上的拦截器绑定注解仅在日志中触发警告,但会被忽略。
这个支持更改旨在防止在私有方法中意外使用拦截器注解,因为它们没有影响,并可能导致混淆。
要解决这一更改,请从私有方法中删除此类注释。如果删除这些注解不可行,您可以将配置属性 quarkus.arc.fail-on-intercepted-private-method 设置为 false。此设置将系统恢复到之前的行为,其中只记录警告。
1.7.2.5. 删除 @AlternativePriority 注释 复制链接链接已复制到粘贴板!
此发行版本删除了之前已弃用的 @AlternativePriority 注释。将它替换为 @Alternative 和 @Priority 注释。
示例: Removed 注解
@AlternativePriority(1)
@AlternativePriority(1)
示例:替换注解
@Alternative @Priority(1)
@Alternative
@Priority(1)
使用带有 @ .Priority 而不是 Priority 注解的 jakarta.annotationio.quarkus.arc.Priority,该注解已弃用,并计划在以后的发行版本中删除。两个注解都执行相同的功能。
1.7.2.6. 测试更改:修复 Mockito 子类模拟制造商 复制链接链接已复制到粘贴板!
此发行版本更新了 Mockito 版本 5.x。值得注意的是,Mockito 将默认的模拟制造商切换为 50.0 发行版中 的 内联。
但是,要保留自 Quarkus 1.x 起熟悉了模拟行为 Quarkus 用户,并防止出现大量 测试套件的内存泄漏,Quarkus 3.0 将 mockmaker 修复到 子类,而不是 内联,直到后者被完全支持。
如果要强制使用 内联 模拟制造商,请按照以下步骤执行:
将以下排除项添加到
pom.xml中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
在您的依赖项中添加
mockito-core。 -
Mockito 5.3 删除了
mockito-inline工件:您可以从依赖项中删除它。
1.7.2.7. 更新至最低支持的 Maven 版本 复制链接链接已复制到粘贴板!
Quarkus 已嵌套其 Maven 插件,以支持 Maven 3.9。因此,Quarkus 支持的最小 Maven 版本从 3.6.2 提升到 3.8.6 或更高版本。确保您的开发环境已相应地更新,以从最新的改进和功能中受益。
1.7.2.8. 删除 quarkus-bootstrap-maven-plugin 复制链接链接已复制到粘贴板!
在这个版本中,之前弃用的 io.quarkus:quarkus-bootstrap-maven-plugin Maven 插件已被删除。
此插件仅用于 Quarkus 扩展开发。因此,如果您要开发自定义 Quarkus 扩展,您必须将工件 ID 从 io.quarkus:quarkus-bootstrap-maven-plugin 改为 io.quarkus-extension-maven-plugin。
这个更改专门用于自定义扩展开发。对于标准应用程序开发,您可以使用 quarkus-maven-plugin 插件。
1.7.2.9. Mutiny 2 移至 Java 流 复制链接链接已复制到粘贴板!
Mutiny 是一个被动编程库,其版本 1.x 基于 org.reactivestream 接口,而版本 2 基于 java.util.concurrent.Flow。这些 API 相同,但软件包名称已更改。
Mutiny 提供在 Mutiny 2 (Flow API)和其他带有传统重新主动流 API 的其他库之间桥接的适配器。
1.7.3. data 复制链接链接已复制到粘贴板!
1.7.3.1. 使用 Panache 方法删除 Hibernate ORM 复制链接链接已复制到粘贴板!
在这个 3.2 发行版本中,以下来自使用 Panache 和 Hibernate ORM 的 Hibernate ORM 方法已被删除:
-
io.quarkus.hibernate.orm.panache.PanacheRepositoryBase#getEntityManager(Class<?> clazz) -
io.quarkus.hibernate.orm.panache.kotlin.PanacheRepositoryBase#getEntityManager (clazz: KClass<Any>)
反之,使用 Panache.getEntityManager (Class<?> clazz) 方法。
1.7.3.2. Hibernate ORM: Automated IN 子句参数 padding 中的增强 复制链接链接已复制到粘贴板!
在这个版本中,Hibernate Object-Relational Mapping (ORM)扩展已更改为将 automatic IN 子句参数 padding 作为默认设置。这提高了对包含 IN 子句的查询的缓存效率。
要恢复到之前的功能并取消激活此功能,您可以将 quarkus.hibernate-orm.query.in-clause-parameter-padding 的属性值设置为 false。
1.7.3.3. 新依赖项:Hibernate Reactive 2 和 Hibernate ORM 6.2 复制链接链接已复制到粘贴板!
在这个版本中,Quarkus 依赖于 Hibernate Reactive 2 扩展而不是 Hibernate Reactive 1。这个变化意味着行为和数据库模式期望有一些变化,它们与早期版本不兼容。
大多数更改都与 Hibernate Reactive 2 相关,具体取决于 Hibernate ORM 6.2 而不是 Hibernate ORM 5.6。
Hibernate Reactive 2 扩展在红帽构建的 Quarkus 3.2 中作为技术预览提供。
如需更多信息,请参阅以下资源:
1.7.3.4. Hibernate 搜索更改 复制链接链接已复制到粘贴板!
在 GeoPoint 字段中对 projectable 和 sortable 的默认设置的更改
在这个 3.2 发行版本中,Hibernate Search 6.2 更改了为 GeoPoint 字段处理默认值的方式。
假设您的 Hibernate Search 映射包含 GeoPoint 字段,该字段使用 projectable 选项的默认值,以及 排序选项的默认值或 。在这种情况下,因为这些字段中缺少 doc 值,Elasticsearch 模式在启动时验证会失败。
Sortable.NO
要防止这个失败,请完成以下步骤之一:
-
通过将
projectable = Projectable.NO添加到相关GeoPoint字段的映射注解来恢复到之前的默认值。 -
重新创建 Elasticsearch 索引并重新索引您的数据库。执行此操作的最简单方法是将
MassIndexer与dropAndCreateSchemaOnStart (true)搭配使用。
如需更多信息,请参阅 "Hibernate Search 6.2.1.Final: Migration Guide from 6.1" 中的数据格式和模式更改 部分。
弃用或重命名的配置属性
在这个 3.2 发行版本中,quarkus.hibernate-search-orm.automatic-indexing.synchronization.strategy 属性已弃用,并计划在以后的版本中删除。改为使用 quarkus.hibernate-search-orm.indexing.plan.synchronization.strategy 属性。
另外,quarkus.hibernate-search-orm.automatic-indexing.enable-dirty-check 属性已被弃用,计划在以后的版本中删除。没有可替换它的替代选择。删除后,计划 Search 会在事务修改对象字段后始终触发重新索引。也就是说,如果事务使字段"dirty"。
如需更多信息,请参阅"Hibernate Search 6.2.1.Final: Migration Guide from 6.1"中的 配置更改 部分。
在这个版本中,Quarkus 不支持手动创建 ValidatorFactory 实例。反之,您必须使用 Validation.buildDefaultValidatorFactory () 方法,它返回由 Quarkus 管理的 ValidatorFactory 实例,您通过上下文和依赖注入(CDI)注入。此更改的主要原因是,必须仔细设计 ValidatorFactory 才能在原生可执行文件中工作。在此发行版本中,您仍然可以手动创建 ValidatorFactory 实例,并在可能正常工作的情况下自行处理它。此更改旨在提高与组件的兼容性,创建自己的 ValidatorFactory。
如需更多信息,请参阅以下资源:
- "使用 Hibernate Validator"指南中的 Hibernate Validator 扩展和 CDI 部分。
- "Validation with Hibernate Validator"指南的 ValidatorFactory 和原生可执行文件 部分。
- 获取"Hibernate Validator 8.0.0.Final - Jakarta Bean Validation Reference Implementation: 参考指南"的验证器实例。
1.7.3.6. quartz 作业类名称更改 复制链接链接已复制到粘贴板!
如果您使用 Java 数据库连接(JDBC)将 Quartz 扩展 的作业存储在数据库中,请运行以下查询来更新 JOB_DETAILS 表中的作业类名称:
UPDATE JOB_DETAILS SET JOB_CLASS_NAME = 'io.quarkus.quartz.runtime.QuartzSchedulerImpl$InvokerJob' WHERE JOB_CLASS_NAME = 'io.quarkus.quartz.runtime.QuartzScheduler$InvokerJob';
UPDATE JOB_DETAILS SET JOB_CLASS_NAME = 'io.quarkus.quartz.runtime.QuartzSchedulerImpl$InvokerJob' WHERE JOB_CLASS_NAME = 'io.quarkus.quartz.runtime.QuartzScheduler$InvokerJob';
QuarkusTransaction.run 和 QuarkusTransaction.call 方法已弃用,现在使用新的、更明确的方法。
更新依赖于这些已弃用方法的代码,如下所示:
之前
QuarkusTransaction.run(() -> { ... });
QuarkusTransaction.call(() -> { ... });
QuarkusTransaction.run(() -> { ... });
QuarkusTransaction.call(() -> { ... });
After
QuarkusTransaction.requiringNew().run(() -> { ... });
QuarkusTransaction.requiringNew().call(() -> { ... });
QuarkusTransaction.requiringNew().run(() -> { ... });
QuarkusTransaction.requiringNew().call(() -> { ... });
之前
After
QuarkusTransaction.joiningExisting().run(() -> { ... });
QuarkusTransaction.joiningExisting().call(() -> { ... });
QuarkusTransaction.joiningExisting().run(() -> { ... });
QuarkusTransaction.joiningExisting().call(() -> { ... });
之前
After
如需更多信息,请参阅 "Using transaction in Quarkus" 指南中的 Programmatic method 部分。
1.7.3.8. 重命名 Narayana 事务管理器属性 复制链接链接已复制到粘贴板!
在这个版本中,quarkus.transaction-manager.object-store-directory 配置属性被重命名为 quarkus.transaction-manager.object-store.directory。通过将旧属性名称替换为新属性来更新您的配置。
1.7.4. 消息传递 复制链接链接已复制到粘贴板!
此发行版本删除了之前为 smallrye-reactive-messaging-kafka 扩展已弃用的 vertx-kafka-client 依赖项。虽然它不用于客户端实现,vertx-kafka-client 为 io.vertx.kafka.buffer.Buffer 软件包提供了默认的 Kafka Serialization 和 Deserialization (SerDes),io.vertx.core.json.JsonObject, 和 io.vertx.core.json.JsonArray 类型来自 io.vertx.kafka.client.serialization 软件包。
如果您需要这个依赖项,您可以获取 io.quarkus.kafka.client.serialization 软件包中上述类型的 SerDe。
1.7.5. 原生 复制链接链接已复制到粘贴板!
1.7.5.1. 原生编译 - 原生可执行文件和 .so 文件 复制链接链接已复制到粘贴板!
在这个版本中,GraalVM/Mandrel 中的更改会影响对 .so 文件(如 Java Abstract Window Toolkit (AWT)扩展)的扩展。
在使用这些扩展时,您必须将对应的 .so 文件复制到原生容器中,例如:
COPY --chown=1001:root target/*.so /work/ COPY --chown=1001:root target/*-runner /work/application
COPY --chown=1001:root target/*.so /work/
COPY --chown=1001:root target/*-runner /work/application
在这种情况下,AWT 扩展提供无头服务器端镜像处理功能,而不是 GUI 功能。
1.7.5.2. 原生编译 - 围绕缺失的 CPU 功能进行工作 复制链接链接已复制到粘贴板!
在这个 3.2 发行版本中,如果您在最新的机器上构建原生可执行文件并在较旧的机器上运行它们,您可能会在启动应用程序时遇到以下故障:
The current machine does not support all of the following CPU features that are required by the image: [CX8, CMOV, FXSR, MMX, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, POPCNT, LZCNT, AVX, AVX2, BMI1, BMI2, FMA]. Please rebuild the executable with an appropriate setting of the -march option.
The current machine does not support all of the following CPU features that are required by the image: [CX8, CMOV, FXSR, MMX, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, POPCNT, LZCNT, AVX, AVX2, BMI1, BMI2, FMA].
Please rebuild the executable with an appropriate setting of the -march option.
此错误消息表示,原生编译使用了运行应用的 CPU 不支持的更多高级指令集。要临时解决这个问题,请在 application.properties 文件中添加以下行:
quarkus.native.additional-build-args=-march=compatibility
quarkus.native.additional-build-args=-march=compatibility
然后,重建您的原生可执行文件。此设置强制原生编译使用旧的指令集,从而增加兼容性几率,但会降低优化。
要显式定义目标架构,请运行 native-image -march=list 来获取受支持的配置列表。然后,指定一个目标架构 ; 例如:
quarkus.native.additional-build-args=-march=x86-64-v4
quarkus.native.additional-build-args=-march=x86-64-v4
如果您在旧的 AMD64 主机时遇到问题,请在使用 -march=x86-64-v2 前尝试 -march= x86-64-v2。
原生 镜像构建选项的 GraalVM 文档指出 "[the -march 参数生成] 指令用于特定机器类型。[This parameter] 默认为 AMD64 上的 x86-64-v3 和 AArch64 上的 armv8-a。使用 -march=compatibility 实现最佳兼容性,如果在同一台机器上或具有相同 CPU 功能的机器上部署原生可执行文件,则使用 -march=native 以获得最佳性能。要列出所有可用机器类型,请使用 -march=list "。
-march 参数仅适用于 GraalVM 23 及更高版本。
1.7.5.3. 测试更改:删除一些注解 复制链接链接已复制到粘贴板!
在这个版本中,之前弃用的 @io.quarkus.test.junit.NativeImageTest 和 @io.quarkus.test.junit.DisabledOnNativeImageTest 注解是 rimage::images/ref_changes- that-affect-backward-compatibility-88d2f.png[].使用新的对应项替换它们。
| 删除的注解 | 新注解 |
|---|---|
|
|
|
|
|
|
替换注解的功能等同于删除的注解。
1.7.6. Observability(可观察性) 复制链接链接已复制到粘贴板!
1.7.6.1. 弃用的 OpenTracing 驱动程序被 OpenTelemetry 替代 复制链接链接已复制到粘贴板!
在这个版本中,对 OpenTracing 驱动程序的支持已弃用。计划在以后的 Quarkus 版本中删除 OpenTracing 驱动程序。
在这个版本中,SmallRye GraphQL 扩展已替换为 OpenTelemetry 的 OpenTracing 集成。因此,在使用 OpenTracing 时,扩展不再为 GraphQL 操作生成 span。
另外,在这个版本中,quarkus.smallrye-graphql.tracing.enabled 配置属性已过时,并已被删除。相反,SmallRye GraphQL 扩展会在存在 OpenTelemetry 扩展时自动生成 span。
更新 Quarkus 应用程序以使用 OpenTelemetry,以便它们保持与将来的 Quarkus 版本兼容。
1.7.6.2. Micrometer 中的默认指标格式现在与 Prometheus 保持一致 复制链接链接已复制到粘贴板!
在这个 3.2 发行版本中,Micrometer 扩展默认以 application/openmetrics-text 格式导出指标,与 Prometheus 标准一致。此更改有助于使您的数据更易于阅读和解释。
要以较早格式获取指标,您可以将 Accept 请求标头改为 text/plain。例如,使用 'curl 命令:
curl -H "Accept: text/plain" localhost:8080/q/metrics/
curl -H "Accept: text/plain" localhost:8080/q/metrics/
1.7.7. 安全性 复制链接链接已复制到粘贴板!
1.7.7.1. 删除 CORS 过滤器默认支持将通配符用作源 复制链接链接已复制到粘贴板!
跨原始资源共享(CORS)过滤器的默认行为已进行了显著更改。在早期版本中,当启用 CORS 过滤器时,它默认支持所有原始卷。在这个 3.2 发行版本中,不再支持所有原始卷。现在,如果要允许所有原始卷,您必须明确将其配置为这样做。
在进行全面的评估后,如果您确定所有源都需要支持,请使用以下方法之一配置系统:
quarkus.http.cors=true quarkus.http.cors.origins=/.*/
quarkus.http.cors=true
quarkus.http.cors.origins=/.*/
相同的原始请求会获得支持,而无需 quarkus.http.cors.origins 配置。因此,只有在允许信任的第三方源请求时,调整 quarkus.http.cors.origins 才会变得至关重要。在这种情况下,启用所有原始卷可能会造成不必要的风险。
请谨慎使用此设置来保持最佳的系统安全性。
1.7.7.2. OpenAPI CORS 支持更改 复制链接链接已复制到粘贴板!
在这个 3.2 发行版本中,OpenAPI 更改了其跨原始资源共享(CORS)设置,不再默认启用通配符(*)原始支持。这个更改有助于防止 OpenAPI 文档的潜在泄漏,提高应用程序的整体安全性。
虽然您可以在 dev 模式中启用通配符源支持,但务必要考虑潜在的安全影响。避免在生产环境中启用所有源,因为它会将您的应用程序暴露给安全威胁。确保您的 CORS 设置与您的生产环境的建议安全最佳实践一致。
1.7.7.3. 默认加密 OIDC 会话 Cookie 复制链接链接已复制到粘贴板!
在这个 3.2 发行版本中,在 OIDC 授权代码流完成后创建的 OpenID Connect (OIDC)会话 cookie 被默认加密。在大多数情况下,您不太可能注意到这个变化。
但是,如果 mTLS 或 private_key_jwt 验证方法 - OIDC 客户端私钥为 JSON Web Token (JWT)签名 - 在 Quarkus 和 OIDC 供应商之间使用,则会生成一个内存加密密钥。这个密钥生成可能会导致一些 pod 无法解密会话 Cookie,特别是在处理多个请求的应用程序中。当尝试解密 Cookie 的 pod 不是加密它的 pod 时,可能会出现这种情况。
如果出现问题,请注册 32 个字符的加密 secret;例如:
quarkus.oidc.token-state-manager.encryption-secret=eUk1p7UB3nFiXZGUXi0uph1Y9p34YhBU
quarkus.oidc.token-state-manager.encryption-secret=eUk1p7UB3nFiXZGUXi0uph1Y9p34YhBU
加密会话 Cookie 不能超过 4096 字节,这可能会导致一些浏览器忽略它。如果出现这种情况,请尝试一个或多个以下步骤:
-
设置
quarkus.oidc.token-state-manager.split-tokens=true,以便在单独的 Cookie 中存储 ID、访问和刷新令牌。 -
如果不需要使用访问令牌作为角色源来请求
UserInfo或将其传播到下游服务,则设置quarkus.oidc.token-state-manager.strategy=id-refresh-tokens。 -
注册自定义
quarkus.oidc.TokenStateManagerContext 和 Dependency Injection (CDI) bean,并将替代优先级设置为1。
如果应用程序用户从可信网络访问 Quarkus 应用程序,请通过应用以下配置来禁用会话 Cookie 加密:
quarkus.oidc.token-state-manager.encryption-required=false
quarkus.oidc.token-state-manager.encryption-required=false
1.7.7.4. 用于 OIDC 会话 Cookie 的默认 SameSite 属性设置为 Lax 复制链接链接已复制到粘贴板!
在这个版本中,对于 Quarkus OpenID Connect (OIDC)扩展,会话 Cookie SameSite 属性默认设置为 Lax。
在一些较早版本的 Quarkus 中,OIDC 会话 Cookie SameSite 属性默认设置为 Strict。此设置引入了不同浏览器处理会话 Cookie 的不可预测性。
1.7.7.5. 默认情况下验证 OIDC ID 令牌受众声明 复制链接链接已复制到粘贴板!
在这个 3.2 发行版本中,默认验证 OpenID Connect (OIDC) ID 令牌 aud (audience)声明。这个声明必须与 OIDC 规格的要求相等配置的 quarkus.oidc.client-id 属性的值。
要覆盖预期的 ID 令牌 audience 值,请设置 quarkus.oidc.token.audience 配置属性。如果您处理没有设置 ID 令牌声明的不合规 OIDC 供应商,您可以将 quarkus.oidc.token.audience 设置为 任何。
将 quarkus.oidc.token.audience 设置为降低 3.2 应用程序的安全性。
1.7.7.6. 删除 JWT 密钥和密钥存储的默认密码 复制链接链接已复制到粘贴板!
在此版本之前,Quarkus 使用 password 作为 JSON Web Token (JWT)密钥和密钥存储的默认密码。在这个版本中,这个默认值已被删除。
如果您仍然使用默认密码,请设置一个新值来替换 application.properties 文件中的以下属性 的密码 :
quarkus.oidc-client.credentials.jwt.key-store-password=password quarkus.oidc-client.credentials.jwt.key-password=password
quarkus.oidc-client.credentials.jwt.key-store-password=password
quarkus.oidc-client.credentials.jwt.key-password=password
1.7.8. Web 复制链接链接已复制到粘贴板!
1.7.8.1. 对 RESTEasy Reactive 多部分的更改 复制链接链接已复制到粘贴板!
在这个版本中,以下更改会影响 RESTEasy Reactive 中的多部分支持:
-
在此版本之前,您可以使用语法来捕获所有文件上传,而不考虑参数名称
:@RestForm List<FileUpload> all,但这不是模糊的,但这不是直观的。现在,此表单只获取名为all的参数,就像其它类型的所有其他形式元素一样,您必须使用以下形式来捕获每个参数,而不考虑其名称:@RestForm (FileUpload.ALL) List<FileUpload> all。 -
多部分表单参数支持已添加到
@BeanParam中。@MultipartForm注释现已弃用。使用@BeanParam而不是@MultipartForm。 -
@BeanParam现在是可选的,对于任何非annotated method 参数,它带有任何@Rest*或@*Param注解的字段。 -
多部分元素不再限制为封装在
@MultipartForm-annotated 类中:它们可用作方法端点参数和端点类字段。 -
现在,多部分元素默认为
@PartType (MediaType.TEXT_PLAIN)MIME 类型,除非它们是FileUpload,Path,File,byte[], 或InputStream。 -
MediaType.TEXT_PLAINMIME 类型的多部分元素现在使用常规ParamConverter基础架构进行反序列化。在此发行版本中,反序列化使用MessageBodyReader。 -
FileUpload、Path、File、byte[]或InputStream类型的多部分元素是特殊的案例,通过 RESTEasy Reactive 扩展,而不是MessageBodyReader或ParamConverter类来反序列化。 -
其他明确设置的 MIME 类型的多部分元素仍然使用适当的
MessageBodyReader基础架构。 -
现在,多部分元素可以嵌套在
List中,以获取具有相同名称的部分的所有值。 -
任何包含
@RestForm或@FormParam参数的客户端调用默认为MediaType.APPLICATION_FORM_URLENCODED内容类型,除非它们是File,Path,Buffer,Multi<Byte> , 或byte[]类型,在这种情况下,默认为MediaType.MULTIPART_FORM_DATA内容类型。
-
类
org.jboss.resteasy.reactive.server.core.multipart.MultipartFormDataOutput已移到org.jboss.resteasy.reactive.server.multipart.MultipartFormDataOutput。 -
类
org.jboss.resteasy.reactive.server.core.multipart.PartItem已移到org.jboss.resteasy.reactive.server.multipart.PartItem。 -
类
org.jboss.resteasy.reactive.server.core.multipart.FormData.FormValue已移到org.jboss.resteasy.reactive.server.multipart.FormValue。 -
REST 客户端不再使用与 Jackson 关联的特定于服务器的
MessageBodyReader和MessageBodyWriter类。在此版本之前,REST 客户端会意外地使用这些类。结果是,使用quarkus-resteasy-reactive-jackson和quarkus-rest-client-reactive扩展的应用程序现在必须包含quarkus-rest-client-reactive-jackson扩展。
1.7.8.2. 增强的 JAXB 扩展控制 复制链接链接已复制到粘贴板!
JAXB 扩展检测使用 JAXB 注释的类,并将它们注册到默认的 JAXBContext 实例中。在此版本之前,类和 JAXB 之间的任何问题或冲突都会在运行时触发 JAXB 异常,并提供了有助于对问题进行故障排除的详细描述。但是,您可以在构建阶段预先处理这些冲突。
此发行版本添加了一个功能,可在构建时验证 JAXBContext 实例,以便您可以在开发周期早期检测和修复 JAXB 错误。
例如,如以下代码块中所示,将这两个类绑定到默认的 JAXBContext 实例会导致 JAXB 异常。这是因为类共享相同的名称 Model,尽管在不同的软件包中都存在。这个并发命名会创建一个冲突,从而导致异常。
要激活这个功能,请添加以下属性:
quarkus.jaxb.validate-jaxb-context=true
quarkus.jaxb.validate-jaxb-context=true
另外,这个版本添加了 quarkus.jaxb.exclude-classes 属性。使用此属性,您可以指定从绑定到 JAXBContext 的类。您可以提供完全限定类名称或软件包列表的逗号分隔列表。
例如,要解决上例中的冲突,您可以排除一个或多个类:
quarkus.jaxb.exclude-classes=org.acme.one.Model,org.acme.two.Model
quarkus.jaxb.exclude-classes=org.acme.one.Model,org.acme.two.Model
或者,您可以排除软件包下的所有类:
quarkus.jaxb.exclude-classes=org.acme.*
quarkus.jaxb.exclude-classes=org.acme.*