用 Thymeleaf 显示已消毒 HTML 的最干净方式?

Cleanest way to display sanitized HTML with Thymeleaf?

我的数据库中有一些数据,我们允许输入 HTML 的一个子集以便稍后显示。出于偏执/不信任旧版本的代码,我想 运行 在显示它之前通过 Jsoup 的 Jsoup.clean() 之类的东西,以防止跨站点脚本 (XSS) 问题。

此外,我想将 "\n" 替换为 "<br/>",以便在这些字段中输入更多自由格式文本的人稍后得到合理的外观。

在我的 JSP 中,我编写了一个自定义标签库来处理这个问题,我这样使用它:

<util:whitelistHtml value="${some.thing}" convertNewlines="true"/>

在 Thymeleaf 中重现此行为的最简洁方法是什么?我看到几个选项:

以上哪一个最有可能在 Thymeleaf 3 之后继续工作,并且意外 XSS 暴露的风险也最小,或者至少比 JSP 更容易审计代码文件是?

我发现添加自定义实用程序对象的解决方案相对简单。

这基本上涉及 creating a new dialect,并覆盖 getAdditionalExpressionObjects 以添加我的新对象的实例:

public class CleanHtmlDialect extends AbstractDialect
        implements IExpressionEnhancingDialect {
    // ...

    @Override
    public Map<String, Object> getAdditionalExpressionObjects(IProcessingContext processingContext) {
        Map<String, Object> expressionObjects = new HashMap<>();
        expressionObjects.put("cleanHtml", new CleanHtml());
        return expressionObjects;
    }
}