我们基于 Angular 的 Web 应用程序与在不同域和上下文路径上运行的企业门户集成。我正在使用基于 Spring Security 的 CSRF 令牌来验证传入请求。该应用程序在本地完美运行,但当我将其与门户集成时,所有 post 调用都失败 403,因为 Angular 无法读取 XSRF-Token 并将请求标头中的 X-XSRF-Token 设置为 API 调用。经过调查,我发现门户和我们的应用程序的上下文路径不同,因此 spring 将 XSRF-Token 的 Path、Expires 和 domain 设置为 Null。有什么方法可以在 Spring 创建 XSRF-Token 时将其设置为特定的 cookie 路径吗?
注意:我有一个替代解决方案来创建过滤器并从请求标头读取 cookie,并使用我想要的路径在浏览器上放置一个新的 cookie。我正在寻找配置级别的解决方案。
在您的配置安全性(Java 文件)中,可以添加:
private CsrfTokenRepository getCsrfTokenRepository() {
CookieCsrfTokenRepository tokenRepository = CookieCsrfTokenRepository.withHttpOnlyFalse();
tokenRepository.setCookiePath("/");
return tokenRepository;
}
并改变功能configure(...)
,行:
http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()).and()...
with
http.csrf().csrfTokenRepository(this.getCsrfTokenRepository()).and()...
这允许有一个解决方案来个性化 cookie 的路径XSRF-TOKEN
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)