4

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

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

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

redirectAttributes.addFlashAttribute("successMsg", message);

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

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

提前致谢。

4

1 回答 1

10

听起来您的客户端 HTTP 会话可能不会在 Tomcat 服务器之间共享。由于 Spring Flash 属性存储在 session 中,您可能会遇到以下情况:

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

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

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

  1. 提供一个“粘性”会话——保证给定客户端的所有请求都被路由到同一个 Tomcat 服务器。通常这是通过负载平衡器/路由机制完成的(例如:nginx ip hash routing)
  2. 实现会话复制——使会话在所有 Tomcat 服务器之间共享,这样无论哪个 Tomcat 为客户端的请求提供服务,HTTP 会话都是相同的。
于 2012-09-22T03:39:26.453 回答