5

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

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

4

1 回答 1

12

在您的配置安全性(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

于 2017-07-30T20:34:13.007 回答