在升級到Spring Security 3.2.0並配置xml之後,_csrf令牌不起作用。spring security 3.2.0 csrf令牌在freemarker模板中不起作用
基本面:
- 春4.0.1
- 春季安全3.2.0。
- Freemarker模板語言
步驟1 - 彈簧安全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 - 在的freemarker模板:
<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模板錯誤:
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標記嗎?你有任何建議或解決方案?
Spring Security的CSRF能很好地工作的Freemarker只要CSRF令牌被添加到模型中(這應該默認完成,因爲它被設置爲HttpServletRequest屬性)。您是否使用Spring MVC的Freemarker(即FreeMarkerViewResolver)?您是否配置了任何塊來禁用安全性(即安全性=無)?如果是這樣,這意味着CSRF令牌不會填充這些請求,您應該使用permitAll。 –
我在Spring MVC中使用了Freemarker,並且已經將access屬性配置爲permitAll。但CSRF令牌沒有填充這些請求。 – m3tr4s
它的工作 - 問題更新... – m3tr4s