4

リダイレクトされたURLに成功または失敗のメッセージを渡すためにredirectAttributesを使用しています。リダイレクトされたページに成功または失敗のメッセージを1回だけ表示できるようにします。同じページが再度更新された場合、メッセージは再度表示されません。これは問題なく、Tomcatでの通常のデプロイメントで正常に機能します。

これで、Webアプリケーションをデプロイしたクラスター環境をセットアップしました。しかし、この場合、redirectAttributesは奇妙に機能しています。動作する場合と動作しない場合があります。

以下は、flashAttributeをリダイレクト属性に追加するために使用しているコード行です。

redirectAttributes.addFlashAttribute("successMsg", message);

クラスター環境にSpring3.1.0.RELEASEバージョンとTomcat7を使用しています。

この問題の回避策があるかどうかを知りたいです。新しいSpringバージョンは、クラスター環境でのredirectAttributesの使用をサポートしていますか?また、この種のことを実行する別の方法があるかどうかを私に知らせることができます。

前もって感謝します。

4

1 に答える 1

10

クライアントのHTTPセッションがTomcatサーバー間で共有されていないようです。Spring Flash属性はセッションに保存されているため、次のような状況が発生している可能性があります。

  1. 最初の要求はserverAに送信され、フラッシュ属性がserverAのセッションに設定されます
  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 に答える