【问题标题】:How to use Struts 2 Token Tag correctly in a distributed Java environment?如何在分布式 Java 环境中正确使用 Struts 2 Token Tag?
【发布时间】:2012-12-19 13:00:44
【问题描述】:

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

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

谁能帮帮我?

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

【问题讨论】:

    标签: struts2 token distributed csrf


    【解决方案1】:

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

    1. 使用 Session Affinity - 因此当用户创建会话时,Nginx 会记住用户访问的后端服务器,并且该会话绑定到该服务器以用于所有后续请求。 (This is the more typical solution)。可能会让您入门。
    2. 根据您的应用程序服务器,可能会在服务器之间共享会话数据。例如,在 Tomcat 6 中,the configuration directions are

    【讨论】:

    • 1) 重新部署或重新启动其中一个应用程序服务器时,使用会话亲和性可能会导致问题,2) 分布式会话很复杂,我不喜欢这样,3) 我考虑使用 memcached替换分布式会话。
    • 由于 Struts 2 已经在一定程度上支持这一点,我正在尝试使用它。
    • 如果您将会话存储在内存缓存中,那么会话(其中包含令牌)将可用于所有 Tomcat 服务器,这不会是问题。
    猜你喜欢
    • 2013-05-18
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 2019-12-16
    相关资源
    最近更新 更多