Thymeleaf 3.1‌版本的内置对象禁用

一、为什么禁用内置对象?

  1. ‌安全性提升‌:自动注入这些对象可能使得开发者更容易在不安全的情况下使用它们,例如在不进行适当验证或清理的情况下输出用户输入。

  2. ‌减少XSS和CSRF风险‌:通过限制这些对象的自动注入,Thymeleaf鼓励开发者在使用这些对象时更加小心,比如在输出用户输入时进行适当的HTML转义,或者在处理表单请求时使用CSRF令牌。

二、手动添加内置对象

  1. 手动注入内置对象:通过WebContext.setVariable()显式传递HttpServletRequest、HttpSession、ServletContext、Locale、ServletConfig、PrintWriter等对象
  2. 兼容Servlet 6.0:使用@WebServlet注解声明Servlet,支持Servlet 6.0规范
  3. Thymeleaf 3.1.2兼容:使用ClassLoaderTemplateResolver加载模板文件
  4. 模板路径:默认加载resources/templates/目录下的HTML文件
  5. 内置对象禁用解决方案:通过手动注入避免Thymeleaf默认禁用内置对象
  6. 直接运行:部署到Servlet容器(如Tomcat)即可访问/thymeleaf路径
  7. 安全性:避免自动注入潜在安全风险,显式控制对象传递
  8. 简洁高效:核心代码仅20行,实现Servlet+Thymeleaf集成
  9. 扩展性:支持添加更多内置对象(如request、session、application、locale等)

三、在CustomTemplateEngine类中手动添加

java 复制代码
/**
     * 处理模板文件
     * @param templateName 模板文件的名称
     * @param request 请求对象
     * @param response 响应对象
     * @throws IOException IO异常
     */
    public void processTemplate(String templateName, HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 创建IServletWebExchange对象
        IServletWebExchange webExchange = application.buildExchange(request, response);
        // 创建WebContext对象
        WebContext context = new WebContext(webExchange, webExchange.getLocale());

        //Thymeleaf 3.1.2‌:禁用了内置对象(如#request、#session等)的默认支持。
        //内置对象禁用:通过 WebContext 传递数据变量,避免使用内置对象
        // 手动添加request对象
        context.setVariable("request", request);
        context.setVariable("response", response);
        context.setVariable("session", request.getSession());
        context.setVariable("application", request.getServletContext());

        // 设置响应体内容类型和字符集
        response.setContentType("text/html;charset=UTF-8");
        // 处理模板数据
        templateEngine.process(templateName, context, response.getWriter());
    }

四、HTML页面

html 复制代码
<!DOCTYPE html>
<!--导入thymeleaf包-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>内置对象</h1>
Established locale country: <span th:text="${#locale.country}">US</span>.
<!-- 上下文对象示例 -->
<p>当前语言: <span th:text="${#locale.language}"></span></p>

<p>当前时间: <span th:text="${#dates.format(#dates.createNow(), 'yyyy-MM-dd HH:mm:ss')}">时间</span></p>
<p>请求URI: <span th:text="${request.requestURI}">请求URI</span></p>
<p>会话ID: <span th:text="${session.isEmpty()}">会话</span></p>
<p>请求方法: <span th:text="${request.method}">请求方法</span></p>
<p>请求方法: <span th:text="${request.getMethod()}">请求方法</span></p>
<p>请求路径: <span th:text="${request.getContextPath()}">请求路径</span></p>
<p>响应头信息: <span th:text="${response.getContentType()}">响应头信息</span></p>

运行效果:

相关推荐
陈年老古董6 小时前
Hive 函数学习笔记(下):窗口函数与经典案例
hive·笔记·学习
爱吃火鸡面呀6 小时前
DataX 实战:使用 HDFS Reader 读取 Hive ORC 表并输出到 Stream
hive·hadoop·hdfs
yumgpkpm7 小时前
CDP 7.3.1(Cloudera Runtime 7.3.1)VS Acceldata ODP 3.3.6.4 核心引擎详细版本对比
大数据·hive·hadoop·postgresql·zookeeper·spark·hbase
计算机毕业编程指导师8 小时前
【计算机大数据毕业设计选题】基于Hadoop+Spark的人工智能社交媒体情绪数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·人工智能·hadoop·计算机·毕业设计·课程设计·社交媒体
yumgpkpm8 小时前
(CDH 7)CDP Private Cloud Base 7.3.1 → Acceldata ODP 3.3.6.4 引擎迁移风险评估表
服务器·人工智能·hadoop·python·华为·zookeeper·hbase
计算机毕业编程指导师8 小时前
【计算机毕设】基于Hadoop的人口统计特征与肥胖风险关联分析的数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·课程设计·肥胖风险
计算机毕业编程指导师8 小时前
【计算机毕业设计选题】基于Hadoop+Spark的乳腺癌数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
hadoop·python·spark·毕业设计·课程设计·乳腺癌·计算机毕设
yumgpkpm14 小时前
Acceldata ODP 3.3.6.4 vs CDP Private Cloud Base 7.3.2 对比
大数据·运维·服务器·hadoop·华为·zookeeper·hbase
yumgpkpm1 天前
Acceldata ODP(Open Data Platform)3.3.6.4(RHEL9)保姆级完整安装手册
大数据·人工智能·hive·hadoop·kafka·hbase·cloudera
sunxunyong1 天前
hs2偶发连接失败问题处理
hadoop