1

Struts 2 支持通过生成唯一的随机令牌并将其存储在会话中来停止表单的双重提交,并使用令牌标签将令牌传递给客户端表单,然后从会话和表单中验证令牌。

据我所知,这个解决方案只能在单个 JVM 中工作,因为会话是相互分离的。我找不到有关如何在分布式 Java 环境中使用此解决方案的有用信息。我们使用 Nginx 代理 HTTP 请求到多个 JVM,Nginx 不保证每次都将相同的请求代理到同一个 JVM。

有人可以给我一些帮助吗?

顺便说一句,我正在尝试使用此解决方案来阻止 CSRF 攻击。

4

1 回答 1

1

您有两种选择(这两种选择都与 Struts 2 无关,但与分布式环境中的会话管理有关):

  1. 使用 Session Affinity - 因此当用户创建会话时,Nginx 会记住用户访问的后端服务器,并且该会话绑定到该服务器以用于所有后续请求。(这是更典型的解决方案)。可能会让你开始。
  2. 根据您的应用程序服务器,可能会在服务器之间共享会话数据。例如,在 Tomcat 6 中,配置方向为.
于 2013-01-05T03:51:33.140 回答