Spring 负载均衡器处理时启动 CSRF 失败

Spring Boot CSRF fails when handled by Load balancer

我已经在 spring 启动时使用基于 header 的令牌方法实现了 CSRF 过滤器。当我 运行 在单个服务器上时,我的应用程序运行良好,当我引入另一台服务器或通过负载均衡器请求 serverd(取决于负载均衡器如何服务请求)时,它无法验证另一台服务器提供的令牌。

这里的任何人都可以告诉我我们如何根据特定密钥为 CSRF 创建令牌,该密钥对于所有服务器都是相同的,并且每个服务器都将访问相同的密钥以识别用户,或者以其他方式共享 CSRF 令牌在不同的服务器中。

有两种方法可以解决此问题:

  1. 将您的负载平衡器配置为 use/work 具有粘性会话。 例如,如果您使用 Nginx 作为负载均衡器,您可以浏览以下链接:

  2. 如果您不想使用粘性会话,则可以使用 Spring 会话,因为默认情况下 CSRF 令牌存储在 HTTP 会话中。

    因此您需要复制 HTTP 会话。您可以使用 Spring Session.

    参考以下链接:


    您需要有一个尚未安装的 Redis 服务器 installed.If 您可以按照以下步骤操作:

    Redis

    Download 并安装 Redis。例如,如果您使用 OS X,则可以使用 Brew,例如

    $ brew install redis  
    

    (如果您使用 Linux,您可以使用 yumapt-get。或者,阅读快速入门指南。)

    调用redis-server命令启动Redis,例如如果您在 OS X:

    上使用 Brew
    $ redis-server /usr/local/etc/redis.conf
    

    [...]

    端口:6379

    [...]

    服务器启动,Redis版本3.0.1

    [...]