フラッシュ属性

Flash 属性は、あるリクエストが別のリクエストで使用するための属性を保存する方法を提供します。これは、リダイレクト時に最も一般的に必要になります。たとえば、Post-Redirect-Get パターン。Flash 属性は、リダイレクトの前に一時的に保存され(通常はセッションで)、リダイレクト後にリクエストで使用可能になり、すぐに削除されます。

Spring MVC には、フラッシュ属性をサポートする 2 つの主要な抽象化があります。FlashMap はフラッシュ属性の保持に使用され、FlashMapManager は FlashMap インスタンスの保存、取得、管理に使用されます。

Flash 属性のサポートは常に「オン」であり、明示的に有効にする必要はありません。ただし、使用しない場合、HTTP セッションが作成されることはありません。各リクエストには、前のリクエストから渡された属性を持つ「入力」 FlashMap (存在する場合) と、後続のリクエストのために保存する属性を持つ「出力」 FlashMap があります。両方の FlashMap インスタンスは、RequestContextUtils の静的メソッドを介して Spring MVC のどこからでもアクセスできます。

アノテーション付きコントローラーは通常、FlashMap を直接操作する必要はありません。代わりに、@RequestMapping メソッドは型 RedirectAttributes の引数を受け入れ、それを使用してリダイレクトシナリオのフラッシュ属性を追加できます。RedirectAttributes を介して追加された Flash 属性は、自動的に「出力」FlashMap に伝播されます。同様に、リダイレクト後、「入力」 FlashMap からの属性は、ターゲット URL を提供するコントローラーの Model に自動的に追加されます。

リクエストをフラッシュ属性に一致させる

フラッシュ属性の概念は他の多くの Web フレームワークに存在し、並行性の課題に時々さらされることが証明されています。これは、定義により、フラッシュ属性は次のリクエストまで保存されるためです。ただし、「次の」リクエストは、意図した受信者ではなく、別の非同期リクエスト(ポーリングまたはリソースリクエストなど)である可能性があります。この場合、フラッシュ属性はすぐに削除されます。

このような課題の可能性を減らすために、RedirectView は、ターゲットリダイレクト URL のパスおよびクエリパラメーターを使用して FlashMap インスタンスを自動的に「スタンプ」します。次に、デフォルトの FlashMapManager は、「入力」 FlashMap をルックアップするときに、その情報を受信リクエストと照合します。

これにより、同時実行性の課題の可能性が完全に排除されるわけではありませんが、リダイレクト URL ですでに利用可能な情報によって大幅に削減されます。主にリダイレクトシナリオにフラッシュ属性を使用することをお勧めします。