2012-09-19 119 views
2

我正在使用redirectAttributes將成功或失敗消息傳遞到重定向的url。這樣我才能在重定向頁面上顯示成功或失敗消息一次。如果再次刷新相同的頁面,則該消息不會再出現。這是沒問題的,在tomcat的正常部署中工作正常。在集羣環境中部署應用程序時,FlashAttributes無法正常工作

現在我們已經建立了一個集羣環境,我們已經部署了Web應用程序。但在這種情況下,redirectAttributes工作起來很奇怪。有時它有效,有時不起作用。

以下是我用來將flashAttribute添加到重定向屬性的代碼行。

redirectAttributes.addFlashAttribute("successMsg", message); 

我使用Spring 3.1.0.RELEASE版本和Tomcat 7作爲集羣環境。

我想知道是否有任何解決此問題的解決方法。更新的Spring版本是否支持在集羣環境中使用redirectAttributes? 你也可以讓我知道是否有另一種方式來執行這種東西。

在此先感謝。

回答

6

聽起來像您的客戶端的HTTP會話可能不會在Tomcat服務器之間共享。由於春天的Flash屬性是stored in the session,您可能會遇到以下:

  1. 初始請求轉到serverA的,和閃光屬性在會話中設置在serverA
  2. 發生了重定向,以及請求被髮送到serverB。 ServerA和serverB上有不同 HTTP會話用戶(假設你有沒有一種機制來分享),所以serverB上沒有看到閃光燈屬性(它有它自己獨立的HTTP會話)

你可能會遇到這種如果發送客戶端請求的服務器不確定,則會間歇性地發生問題。例如,如果上述兩個請求都發生到serverA,則Flash屬性將正常工作,因爲會話將相同。

如果是這種情況,那麼你需要一個機制之一:

  1. 提供一個「粘性」會話 - 保證對於一個給定的客戶端的所有請求被路由到相同的Tomcat服務器。通常這是通過負載平衡器/路由機制來完成的(例如:nginx ip散列路由)
  2. 實施session replication - 使所有Tomcat服務器之間共享會話,以便無論Tomcat爲客戶端提供請求,HTTP會話將是相同的。
+0

完美。你已經很好地理解了這個問題並相應地做出了回答非常感謝您的答覆。我會肯定地嘗試這個。 :) –

+0

你能告訴我會話複製的工作配置嗎?我已閱讀您在第二種機制中提供的鏈接,但無法弄清楚如何實現這一點。請提供配置。 :) –

相關問題