2014-02-06 50 views
3

我參考了以下有關csrf configuration的Spring Security文檔。用Spring Security重命名CSRF令牌標題名稱

似乎默認標題名稱爲CSRF令牌是:

<meta name="_csrf" content="${_csrf.token}"/> 
<!-- default header name is X-CSRF-TOKEN --> 
<meta name="_csrf_header" content="${_csrf.headerName}"/> 

看來AngularJs使用下面的頭名:X-XSRF-TOKEN

X-CSRF-TOKEN

,如文檔中解釋

  1. 如何更改標題名稱春季安全方面?
  2. 這是繼續進行的最佳方式嗎?
  3. 它會影響傳統的非ajax表單提交的CSRF保護,特別是XSRF參數名稱嗎?
+0

您是否需要在Angular中做其他任何事情才能使其工作?我使用彈簧安全3.2與上述配置,仍然得到「期望的CSRF令牌未找到。您的會話過期」 –

回答

4

你可以創建自己的bean實例HttpSessionCsrfTokenRepository,設置屬性headerName在這種情況下,並通過一個參照本實例CSRF配置<security:csrf token-repository-ref="..." />。例如,

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

<security:http> 
    <security:csrf token-repository-ref="csrfTokenRepository" /> 
</security:http> 
+0

我使用基於Java配置的spring-security 3.2,有沒有一種方法可以在HttpSessionCsrfTokenRepository中設置HeaderName。我實際上最終創建了我自己的CustomSessionCsrfTokenRepository,它仍然不起作用。 –

+0

請問這有一個新的問題,我可以在答案中。 – manish

+0

你可以在這裏回答,http://stackoverflow.com/questions/24022967/using-angularjs-with-springsecurity3-2-for-csrf。我最終創建了一個CustomCsrfTokenRepository來覆蓋標題名稱。 –