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

时间:2012-09-19 06:35:09

标签: spring spring-3

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

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

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

redirectAttributes.addFlashAttribute("successMsg", message);

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

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

提前致谢。

1 个答案:

答案 0 :(得分:8)

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

  1. 初始请求转到serverA,并在serverA上的会话中设置flash属性
  2. 发生重定向,请求被发送到serverB。 serverA和serverB为用户提供不同的 HTTP会话(假设您没有共享它们的机制),因此serverB没有看到flash属性(它有自己独立的HTTP会话)
  3. 如果发送客户端请求的服务器不确定,则可能会间歇性地遇到此问题。例如,如果上述两个请求碰巧都发送到serverA,那么flash属性将正常工作,因为会话将是相同的。

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

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