spring security 3.2.0 csrf令牌在freemarker模板中不起作用

时间:2014-02-13 14:37:38

标签: spring-security csrf freemarker

升级到Spring Security 3.2.0并配置xml后,_csrf令牌无效。

基本面:

  • Spring 4.0.1
  • Spring Security 3.2.0。
  • Freemarker模板语言

第1步 - spring security xml配置:

<!-- enable csrf protection via csrf-element -->
<sec:http>
    <!-- -->
    <sec:csrf token-repository-ref="csrfTokenRepository" />
</sec:http>

<!-- rewrite headerName -->
<bean id="csrfTokenRepository" class="org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository">
    <property name="headerName" value="X-SECURITY" />
</bean>

第2步 - 自由标记模板:

<form accept-charset="UTF-8" action="/portal" method="POST" name="formAddItemToCart">
    <!-- ... -->

    <!-- inlcude csrf token -->
    <input type="hidden"
           name="${_csrf.parameterName}"
           value="${_csrf.token}"/>
</form>

第3步 - 渲染输出:

<form accept-charset="UTF-8" action="/portal" method="POST" name="formAddItemToCart">
    <!-- ... -->

    <input type="hidden" name="" value=""/>
</form>

第4步 - 自由标记模板错误:

FreeMarker template error:
The following has evaluated to null or missing:
==> _csrf  [in template "cart.ftl" at line 28, column 21]

参考: http://docs.spring.io/spring-security/site/docs/3.2.0.RELEASE/reference/htmlsingle/#csrf

目前我正在调试整个应用程序。

我不知道究竟问题出在哪里 - 但似乎csrf无法使用freemarker。这通常可以在freemarker模板中包含csrf令牌吗?您有任何建议或解决方案吗?

1 个答案:

答案 0 :(得分:0)

<强>更新

xml配置未正确完成。 我发现这个解决方案对我很有帮助。 https://github.com/spring-projects/spring-mvc-showcase/commit/361adc124c05a8187b84f25e8a57550bb7d9f8e4

现在我的文件看起来像这样:

的security.xml

NVARCHAR2

的web.xml

concat('xyz',sysdate)