为什么在Spring-boot速度视图标签内没有解析“_csrf”属性?

时间:2016-07-20 09:18:27

标签: spring spring-boot velocity

我有一个Spring-Boot项目,Velocity模板配置完全正常......

在我的速度视图中,我有以下内容;

<head>
    <!-- some other meta tags here -->

    <meta name="csrf-token" content="$!_csrf.token">
</head>

这是我在chrome中检查时输出的样子;

<meta name="csrf-token" content="$!_csrf.token">

然而,在同一页面上,我有一个看起来像这样的表格;

<form method="post" action="/post/to/wherever">
    <input type="hidden" id="csrf" name="$!_csrf.parameterName" value="$!_csrf.token" data-header="$!_csrf.headerName"/>

    <!-- other fields here -->

</form>

浏览器检查显示以下内容;

<input type="hidden" name="_csrf" value="69799b81-7c45-4042-9269-3a83769df682" data-header="X-CSRF-TOKEN">

很明显, _csrf 属性在表单正文中注入并解析,但不在 head 元标记内。

问题: 什么会导致这样的事情?

1 个答案:

答案 0 :(得分:0)

好的,我最终发现这里发生的事情是由于一个非常简单的疏忽造成的。

我在单独的模板中有<head>...</head>部分,并将其包含在其他模板中,如下所示;

#include("/pages/common/header.vm")

嗯,对于速度的用户来说,很明显,上面只是按原样包含模板(即所有内容都被翻译为文本),并且不会解析在其中声明的任何速度上下文属性。所以我只需将其更改为以下

#parse("/pages/common/header.vm")

这可确保正确解析header.vm模板中声明的任何速度属性,并相应地读取值。

我最初会删除一个问题,认为它首先不应该被问到,但我意识到,这是 StackOverflow ,更好只是指出错误并为别人节省一些时间。从本质上讲,让世界变得更美好...干杯!