You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot JTE主模板自动添加CSRF Token的最优方案

解决JTE模板中全局处理CSRF Token与认证状态判断的方法

一、全局自动注入CSRF Token与认证状态

不用每个控制器手动传递参数,通过Spring的@ControllerAdvice实现全局注入,一次性把CSRF Token和认证状态传给所有模板:

@ControllerAdvice
public class GlobalModelInjector {
    @ModelAttribute
    public void addGlobalAttributes(Model model, CsrfToken csrfToken, Authentication authentication) {
        // 注入CSRF Token
        if (csrfToken != null) {
            model.addAttribute("csrf", csrfToken.getToken());
        }
        // 注入当前认证信息
        model.addAttribute("currentAuth", authentication);
    }
}

二、主布局中的条件判断与CSRF使用

在主布局模板里直接调用全局注入的变量,无需每个视图单独传参:

@param String title
@param content content

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>${title}</title>
</head>
<body>
    <header>
        @if (currentAuth != null && currentAuth.isAuthenticated() && !"anonymousUser".equals(currentAuth.getName())) {
            <!-- 已认证显示登出表单 -->
            <form action="/logout" method="POST" style="display: inline;">
                <input type="hidden" name="_csrf" value="${csrf}">
                <button type="submit">登出</button>
            </form>
        } @else {
            <!-- 未认证显示登录链接 -->
            <a href="/login">登录</a>
        }
    </header>

    <main>
        ${content}
    </main>
</body>
</html>

三、关于JTE原生支持与开源贡献

如果希望JTE像Thymeleaf一样原生支持CSRF自动处理,可以:

  • 给JTE的代码仓库提交Issue,明确描述需求场景;
  • 参考Thymeleaf的CSRF实现逻辑,编写PR添加全局标签或自动注入机制,这类实用功能的贡献通常会被官方接受。

内容的提问来源于stack exchange,提问作者theMyth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 06:55:05