百科狗-知识改变命运!
--

th:utext详解

是丫丫呀1年前 (2023-11-21)阅读数 32#技术干货
文章标签属性

th:utext是Thymeleaf模板引擎中的一个属性,用于显示未经转义的文本。在网页开发过程中,有时需要特殊字符显示在页面上,而不是被转义,可以使用th:utext属性解决这个问题。下面从几个不同角度阐述th:utext的使用方法。

在此示例代码中,content是一个包含HTML代码的字符串,使用th:utext属性可以将其中的HTML代码正确地展示在网页上,而不是被转义处理。

在此示例代码中,如果content的值为

hello

,那么使用th:text属性显示的内容为

hello

,而使用th:utext属性显示的内容为hello。

三、th:utext的安全性问题

虽然th:utext可以正确地展示包含HTML代码的字符串,但是也存在安全性问题。例如,如果在文本中包含了JavaScript代码,那么这些代码会在用户访问页面时被执行,可能导致安全问题。因此,在使用th:utext属性时,需要注意过滤用户输入内容,确保用户输入的内容不会包含恶意代码。

th:utext详解

为了解决这个问题,可以将用户输入的内容经过过滤处理,例如使用Jsoup或其他过滤库,将用户输入的内容中的危险标签(如等)和属性删除,只保留必要的标签和属性。

四、th:utext的高级用法——自定义转义器

除了Thymeleaf自带的转义器外,还可以通过扩展Thymeleaf来实现自定义的转义器。例如,可以使用Jsoup来实现一个自定义的转义器,将输入的HTML内容过滤后再输出到网页上。代码示例如下:

public class JsoupUtils {

    private static final Whitelist WHITE_LIST = Whitelist.basicWithImages().addTags("video", "source", "audio");

    public static String cleanAndParseHtml(String html) {
        return Jsoup.clean(html, WHITE_LIST);
    }
}

@Configuration
public class ThymeleafConfig implements ITemplateResolver {

    @Override
    public String getName() {
        return "ThymeleafConfig";
    }

    @Override
    public Integer getOrder() {
        return 1;
    }

    @Override
    public String resolveTemplate(TemplateContext ctx) {
        return ctx.getTemplateName();
    }

    @Override
    public TemplateResolution resolveTemplate(
            EngineConfiguration configuration,
            TemplateProcessingParameters templateProcessingParameters,
            Map map) {

        TemplateMode templateMode = templateProcessingParameters.getTemplateMode();
        String prefix = templateProcessingParameters.getPrefix();

        String resourceName = templateProcessingParameters.getResourceName();
        String templateName = resourceName.substring(prefix.length(), resourceName.length() - templateMode.getExtension().length());

        InputStream inputStream = this.getClass().getResourceAsStream("/" + resourceName);

        try (InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8")) {
            char[] buffer = new char[4096];
            int readLen;
            StringBuilder stringBuilder = new StringBuilder();

            while ((readLen = reader.read(buffer)) != -1) {
                stringBuilder.append(buffer, 0, readLen);
            }

            String html = stringBuilder.toString();
            html = JsoupUtils.cleanAndParseHtml(html);

            return new TemplateResolution(html, getName(), templateMode, getResourceResolver());
        } catch (Exception e) {
            return null;
        }
    }

    @Override
    public IResourceResolver getResourceResolver() {
        return null;
    }

    @Override
    public String getPrefix() {
        return null;
    }

    @Override
    public boolean isCacheable() {
        return false;
    }
} 

在此示例代码中,ThymeleafConfig类实现了ITemplateResolver接口,可以实现自定义的Thymeleaf模板解析。在resolveTemplate方法中,使用Jsoup对模板中的HTML内容进行处理,并返回处理后的内容。在html页面中,可以使用th:utext属性来展示经过Jsoup处理后的内容。

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)