2017-02-20 48 views
0

我们基于Angular的web应用程序与运行在不同域和上下文路径上的企业门户集成。我正在使用基于Spring Security的CSRF令牌来验证传入的请求。该应用程序在本地完美工作,但是当我将它与门户集成时,所有后期调用都失败403,因为Angular无法读取XSRF-Token,并将请求标头中的X-XSRF-Token设置为API调用。经过调查,我发现门户网站的上下文路径和我们的应用程序是不同的,因此Spring将XSRF-Token的Path,Expires和domain设置为Null。有什么办法可以在Spring创建时将XSRF-Token设置为特定的Cookie路径?如何将CSRF令牌设置为不同的上下文路径

注意:我有一个替代解决方案来创建过滤器并从请求标头中读取cookie,并在浏览器中放置一个新的cookie,并使用我想要的路径。我正在寻找配置级别的解决方案。

回答

0

在配置安全(.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

相关问题