这篇博客文章久拖未发,但现在终于可以正式宣布 Hibernate Validator 6.1.0.Final 和 6.0.18.Final 的发布。
Hibernate Validator 6.0.18.Final 仅包含错误修复。它是对使用 Hibernate Validator 的所有人的推荐升级,并且是 6.0.17.Final 的直接替代品。
6.1.0.Final 是我们最新的和最好的版本。它基于 Jakarta Bean Validation。关于这一点,稍后会详细介绍。
CVE-2019-10219 和 @SafeHtml 的状态
我们得知了与 @SafeHtml
约束相关的 CVE-2019-10219,并在 6.0.18.Final 和 6.1.0.Final 中修复了它。
问题的核心是约束可能接受处理指令(如 <?php
)或评论中嵌入的代码(如 IE 条件 JavaScript 执行或 SSI - 对,这个很老)作为有效输入。这个问题已被修复,我们的实现应该已经足够安全。
然而,我们得出结论,@SafeHtml
约束是脆弱的,高度安全敏感,并且依赖于一个未为此目的设计的库。将其包含在核心 Hibernate Validator 中不是一个很好的主意。这就是为什么我们弃用了它,并标记为将其删除。
这里没有神奇的计划,因此我们的用户将不得不自己维护此约束,无论是在他们的项目中还是在集中式开源项目中。我们有一篇很好的文章介绍了如何在 Hibernate Validator 中声明自己的约束 这里。
这是一个不容易的决定,我们已经收到了很多关于它的反馈。但我们认为从长远来看这是最好的。
Hibernate Validator 6.1.0.Final
迁移到 Jakarta Bean Validation
Hibernate Validator 6.1.0.Final 现在采用 Jakarta Bean Validation 组件作为 Bean Validation 规范和 API,因为这些规范和 API 已经迁移到 Eclipse Jakarta。
新的 API 组件为 jakarta.validation:jakarta.validation-api
。如果您正在使用依赖老版本的 javax.validation
组件的其他依赖项,请注意潜在冲突。
API 没有发生变化,只是 Maven 坐标发生了变化。
PropertyNodeNameProvider SPI
我们现在提供了一种自定义 ConstraintViolation
中使用的属性名称的方法。例如,您现在可以通过利用这个新功能从您的 Jackson 注解中提取属性名称。
新的合约称为 PropertyNodeNameProvider
,您可以在我们的文档中了解更多信息:此处。
为未来铺路
我们对以下内容进行了多项结构性的修改:
-
进一步减少我们的内存使用并提高我们的性能;
-
为所谓的自由格式验证铺平道路,例如 JSON 验证。我们还没有到达那里,但基础设施工作的一部分已经完成。
Quarkus
坦白说,Quarkus 用户已经使用了一段时间的 6.1 版本,因为它包含了许多必要的引导更改,以优化 Hibernate Validator 以适应 Quarkus。
旧的引导程序仍然为所有其他 Hibernate Validator 消费者提供,但如果您好奇,请查看 Quarkus Hibernate Validator 扩展 和新的 PredefinedScopeValidatorFactory
。
小改动
-
我们现在支持在
MonetaryAmount
上使用@Digits
。 -
我们现在有中文(繁体和简体)、丹麦语、意大利语、波兰语和罗马尼亚语的翻译。
-
现在在
HibernateMessageInterpolatorContext
中可用propertyPath
。 -
我们的 JPMS 和 OSGI 模块名称现在相同:
org.hibernate.validator
和org.hibernate.validator.cdi
:这意味着 OSGi 打包名称已更改。
获取 6.1.0.Final
要使用 Maven、Gradle 等. 获取发行版,请使用以下 GAV 坐标
-
org.hibernate.validator:hibernate-validator:6.1.0.Final
-
org.hibernate.validator:hibernate-validator-cdi:6.1.0.Final
-
org.hibernate.validator:hibernate-validator-annotation-processor:6.1.0.Final
注意,组 ID 已从 org.hibernate
(Hibernate Validator 5 及更早版本)更改为 org.hibernate.validator
(从 Hibernate Validator 6 开始)。
如果您想从 WildFly 中受益于本版本的最新功能,我们还提供了适用于 WildFly 17.0.1 和 WildFly 18 的 WildFly 补丁。您可以在这里了解如何应用此类补丁。
Hibernate Validator 6.0.18.Final
获取 6.0.18.Final
要使用 Maven、Gradle 等. 获取发行版,请使用以下 GAV 坐标
-
org.hibernate.validator:hibernate-validator:6.0.18.Final
-
org.hibernate.validator:hibernate-validator-cdi:6.0.18.Final
-
org.hibernate.validator:hibernate-validator-annotation-processor:6.0.18.Final
注意,组 ID 已从 org.hibernate
(Hibernate Validator 5 及更早版本)更改为 org.hibernate.validator
(从 Hibernate Validator 6 开始)。
如果您想在WildFly上使用这个版本的新特性,我们还提供了WildFly补丁,适用于WildFly 17.0.1和WildFly 16。您可以在这里了解如何应用这些补丁。
反馈、问题、建议?
请使用常规渠道联系我们
-
用户论坛(使用问题,一般反馈)
-
问题跟踪器(错误报告,功能请求)
-
邮件列表(与开发相关的讨论)
-
Bean Validation开发邮件列表(关于Bean Validation规范的讨论)