使用 Spring Security 重命名 CSRF 令牌头名称
Posted
技术标签:
【中文标题】使用 Spring Security 重命名 CSRF 令牌头名称【英文标题】:Renaming the CSRF token header name with Spring Security 【发布时间】:2014-03-03 11:50:24 【问题描述】:我参考了以下有关 csrf configuration 的 Spring Security 文档。
csrf 令牌的默认标头名称似乎是:X-CSRF-TOKEN
如文档中所述:
<meta name="_csrf" content="$_csrf.token"/>
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" content="$_csrf.headerName"/>
AngularJs 似乎使用以下标头名称:X-XSRF-TOKEN
-
如何更改 Spring 安全端的标头名称?
这是最好的方法吗?
是否会影响 CSRF 对经典非 ajax 表单提交的保护,特别是 XSRF 参数名称?
【问题讨论】:
您是否需要在 Angular 中执行其他任何操作才能使其正常工作?我正在使用带有上述配置的 spring-security 3.2,但仍然得到“未找到预期的 CSRF 令牌。您的会话是否已过期” 【参考方案1】:您可以创建自己的HttpSessionCsrfTokenRepository
bean 实例,在此实例上设置属性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>
【讨论】:
我正在使用基于 Java 配置的 spring-security 3.2,有没有办法可以在 HttpSessionCsrfTokenRepository 中设置HeaderName。我实际上最终创建了自己的 CustomSessionCsrfTokenRepository,它仍然无法正常工作。 请问这有一个新问题,我可以在其中填写答案。 你可以在这里回答,***.com/questions/24022967/…。我最终创建了一个 CustomCsrfTokenRepository 只是为了覆盖标题名称。 请检查此线程***.com/questions/31293303/…中的组合答案@以上是关于使用 Spring Security 重命名 CSRF 令牌头名称的主要内容,如果未能解决你的问题,请参考以下文章
Grails 使用 spring-security-core-3.0.6+ 重定向注销后
Spring security - 身份验证后的 GWT 重定向
使用 Spring Security 登录后重定向到不同的页面
使用 spring 4 获取“无法找到 XML 模式命名空间 [http://www.springframework.org/schema/security] 的 Spring NamespaceHa