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
相关产品推荐
相关产品推荐

