我们基于Angular的webapp与企业门户集成,后者在不同的域和上下文路径上运行。我使用基于Spring Security的CSRF令牌来验证传入的请求。该应用程序完全在本地工作,但当我将其与门户集成时,所有后置调用都失败了403因为Angular无法读取XSRF-Token并将请求头中的X-XSRF-Token设置为API调用。经过调查,我发现门户网站和我们的应用程序的上下文路径是不同的,因此spring将XSRF-Token设置为Path,Expires和domain为Null。有什么办法可以在Spring创建时将XSRF-Token设置为特定的cookie路径吗?
注意:我有一个替代解决方案来创建过滤器并从请求标头中读取cookie并使用我想要的路径在浏览器上删除新的cookie。我正在寻找配置级别的解决方案。
答案 0 :(得分:4)
在配置安全性(Java文件)中,可以添加:
private CsrfTokenRepository getCsrfTokenRepository() {
CookieCsrfTokenRepository tokenRepository = CookieCsrfTokenRepository.withHttpOnlyFalse();
tokenRepository.setCookiePath("/");
return tokenRepository;
}
并更改函数configure(...)
,行:
http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()).and()...
与
http.csrf().csrfTokenRepository(this.getCsrfTokenRepository()).and()...
这允许有一个解决方案来个性化cookie XSRF-TOKEN
的路径。