javascript - 使用 Thymeleaf 创建 CSRF JS 元标记
问题描述
我不确定这是否可行,但我希望在整个站点使用的 javascript 文件中创建两个 CSRF 元标记(标题和令牌)。但是,我不认为这是可能的,因为百里香叶如何处理来自插值数据变量的数据。
我尝试使用以下代码创建 HTML 元标记元素:
var meta = document.createElement("meta");
meta.setAttribute("name", "_csrf");
meta.setAttribute("th:content", "_csrf.token")
这将创建具有所需值的必要元素(仅显示标记)。但是,当打印出令牌的值时,它会返回“_csrf.token”而不是实际的 csrf 值。我相信这是因为百里香没有正确处理插值。
这些元标记必须手动添加到每个页面的 html 文件中,还是可以使用通用 javascript 文件动态创建?
谢谢!
解决方案
我建议使用 layout:dialect 创建一个所有页面都可以访问的模板。您可以将<meta />
标签放在那里并在所有页面之间共享。
如果您打算使用 JavaScript,则可以通过与页面相同的 spring 进程运行 JavaScript(如果您已为它正确设置了所有内容)。例如,像这样:
@GetMapping("/your-javascript-name.js")
public String deposit() {
return "javscript/your-javascript-name";
}
这样你仍然可以在外部包含它:
<script src="your-javascript-name.js"></script>
在 javascript 中,您可以使用 Thymeleaf:
var token = /*[[${_csrf.token}]]*/ '';
var meta = document.createElement("meta");
meta.setAttribute("name", "_csrf");
meta.setAttribute("content", token);
推荐阅读
- c++ - 用来自另一个进程的数据填充分配的内存
- javascript - 如何创建一个由数组中的函数组成的大型函数,并与逻辑 AND 连接?
- python - 在 json 文件中从字典中添加列表值
- javascript - 添加活动时,Google 公共日历 API 返回错误 401 login required
- c# - 如何使用dynamic-linq通过表达式“前缀”顺序
- python - 将字典列表解压缩到 Pandas 中的单独列中
- python - 数据框列复制导致 Nan
- prolog - prolog中的持续时间比较
- r - 将一个数据帧中的值替换为另一个数据帧
- ruby - Ruby 命令在 Windows Ruby 命令提示符中失败,并显示“无法加载此类文件”