有什么替代 Hibernate Validator 的 @SafeHtml 来验证字符串?

C C*_*C H 17 java hibernate-validator

正如 JavaDocs 中所述,它将在未来版本中删除。是否有任何替代库可以通过注释类似地工作?

Gui*_*met 15

让我们首先解释弃用的原因:由于这种限制,我们最近遇到了安全问题 (CVE)。这是由于我们的实现中的一个错误,但它让我们意识到这是非常脆弱的,并且可能是一个安全明智的蠕虫罐头。

现在的替代方法是根据我们最新的实现自己实现它,并在您自己的应用程序中维护它(可能需要您自己的调整)。

我们的博客上有一篇很好的文章解释了如何轻松做到这一点:https : //in.relation.to/2017/03/02/adding-custom-constraint-definitions-via-the-java-service-loader/ .

基本上,这种变化是我们说我们不想承担可能脆弱且需要大量关注的事情的责任,而调整可能特定于它所部署的应用程序平台。

更新:我在这里发布了一个完整的公告:https : //in.relation.to/2019/11/20/hibernate-validator-610-6018-released/


GKi*_*lin 5

我的解决方案:

pom.xml

    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.14.2</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

NoHtml.java

@Documented
@Constraint(validatedBy = NoHtmlValidator.class)
@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface NoHtml {
    String message() default "Unsafe html content";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}
Run Code Online (Sandbox Code Playgroud)

NoHtmlValidator.java

public class NoHtmlValidator implements ConstraintValidator<NoHtml, String> {
    @Override
    public boolean isValid(String value, ConstraintValidatorContext ctx) {
        return value == null || Jsoup.isValid(value, Safelist.none());
    }
}
Run Code Online (Sandbox Code Playgroud)

任何豆:

@NoHtml
private String name;
Run Code Online (Sandbox Code Playgroud)

请参阅jsoup - 清理 HTML清理用户输入,第二部分(使用 Spring REST 进行验证)

更新:更改Jsoup.clean..equals..Jsoup.isValid