Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Struts2 如何在分布式Java环境中正确使用Struts 2标记?_Struts2_Token_Distributed_Csrf - Fatal编程技术网

Struts2 如何在分布式Java环境中正确使用Struts 2标记?

Struts2 如何在分布式Java环境中正确使用Struts 2标记?,struts2,token,distributed,csrf,Struts2,Token,Distributed,Csrf,Struts 2支持通过生成一个唯一的随机令牌并将其存储在会话中,然后使用令牌标记将令牌传递给客户机表单,然后验证会话和表单中的令牌来停止表单的双重提交 据我所知,这个解决方案只能在单个JVM中工作,因为会话彼此分离。我找不到关于如何在分布式Java环境中使用此解决方案的有用信息。我们将Nginx代理HTTP请求用于多个JVM,Nginx不保证每次都将相同的请求代理到相同的JVM 有人能给我一些帮助吗 顺便说一句,我正在尝试使用此解决方案来阻止CSRF攻击。您有两种选择(这两种选择都与Strut

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

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

有人能给我一些帮助吗

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

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

  • 使用会话关联-因此,当用户创建会话时,Nginx会记住用户访问的后端服务器,并且该会话将绑定到该服务器以用于所有后续请求。也许能让你开始
  • 根据应用服务器的不同,可能存在在服务器之间共享会话数据的可能性。例如,在Tomcat6中
  • 您有两种选择(这两种选择都与Struts 2无关,但都与分布式环境中的会话管理有关):

  • 使用会话关联-因此,当用户创建会话时,Nginx会记住用户访问的后端服务器,并且该会话将绑定到该服务器以用于所有后续请求。也许能让你开始
  • 根据应用服务器的不同,可能存在在服务器之间共享会话数据的可能性。例如,在Tomcat6中

  • 1)在重新部署或重新启动一个应用服务器时,使用会话亲和性会导致问题,2)分布式会话复杂,而我不喜欢这一点,3)我考虑使用MeMcCurp替换分布式会话。因为Struts 2已经在某种程度上支持了这一点,所以我尝试使用它。如果您将会话存储在MyCask中,然后会话(包含令牌)将可用于所有Tomcat服务器,这不会成为问题。1)使用会话关联可能会在重新部署或重新启动其中一个应用程序服务器时导致问题,2)分布式会话是复杂的,我不喜欢这个,而3)我考虑使用MimcCurp来代替分布式会话。因为Struts 2已经在某种程度上支持了这一点,我正在尝试使用它。如果您将会话存储在MEMCACHE中,那么会话(带有令牌的会话)将可用于所有Tomcat服务器,这不会成为问题。