gpt4 book ai didi

spring - 当应用程序部署在集群环境中时,FlashAttributes 无法正常工作

转载 作者:行者123 更新时间:2023-12-02 02:17:43 25 4
gpt4 key购买 nike

我正在使用redirectAttributes 将成功或失败消息传递到重定向网址。这样我就可以在重定向页面上仅显示一次成功或失败消息。如果再次刷新同一页面,则该消息将不会再次出现。这是正常的,并且在 tomcat 上正常部署时工作正常。

现在我们已经设置了一个集群环境,并在其中部署了 Web 应用程序。但在这种情况下,redirectAttributes 的工作方式很奇怪。有时有效,有时无效。

以下是我用来将 flashAttribute 添加到重定向属性的代码行。

redirectAttributes.addFlashAttribute("successMsg", message);

我使用 Spring 3.1.0.RELEASE 版本和 Tomcat 7 作为集群环境。

我想知道这个问题是否有解决方法。是否有较新的 Spring 版本支持在集群环境中使用redirectAttributes?您也可以让我知道是否有其他方法可以执行此类操作。

提前致谢。

最佳答案

听起来您的客户端 HTTP session 可能无法在 Tomcat 服务器之间共享。由于 Spring Flash 属性为 stored in the session ,您可能遇到以下情况:

  1. 初始请求发送至 serverA,并在 serverA 上的 session 中设置 flash 属性
  2. 发生重定向,请求被发送到 serverB。 serverA 和 serverB 为用户提供不同 HTTP session (假设您没有共享它们的机制),因此 serverB 看不到 flash 属性(它有自己独立的 HTTP session )

如果客户端请求发送到的服务器不确定,您可能会间歇性地遇到此问题。例如,如果上述两个请求碰巧都发送至 serverA,则 flash 属性将正常工作,因为 session 将相同。

如果是这种情况,那么您需要一种机制来:

  1. 提供“粘性” session ——保证给定客户端的所有请求都路由到同一 Tomcat 服务器。通常这是通过负载均衡器/路由机制来完成的(例如:nginx ip hash 路由)
  2. 实现session replication -- 使 session 在所有 Tomcat 服务器之间共享,这样无论哪一个 Tomcat 为客户端提供请求,HTTP session 都是相同的。

关于spring - 当应用程序部署在集群环境中时,FlashAttributes 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12489603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com