アプリケーションの複数の負荷分散インスタンスを実行しているときにセッションの同時変更を防止できますか?スプリングセッション - セッションの同時変更を防止する
コンテキスト:複数のtomcats、すべて同じアプリケーションを実行しています。アプリケーションはSpringセッションを使用してセッションをRedisクラスタに格納します。ロードバランサは、着信要求を1つのtomcats(非粘着性)に配信します。ユーザーがボタンを押すと、Tomcat 1はリクエストを非常にゆっくり処理します(パフォーマンスの問題など)。ユーザーがもう一度ボタンを押すと、Tomcat 2ははるかに高速で、成功を返信します。ユーザーは次のページに進みます。 Tomcat 1は最初の要求を完了し、セッションを上書きします。すべての先行するページのデータは失われます。
解決策は、セッションをロックすることです。これにより、Tomcat 2は同時の変更を検出し、エラーで応答することができます(矛盾した状態を取得するよりはるかに良い)。
Thxをたくさん AB
Thx多くのVedranいくつかの発言: ボタンを無効にしても、ユーザーは「F5」を押すか複数のブラウザーウィンドウを使用する可能性があるため、問題は解決しません。 セッションレポジトリで問題を処理するための適切なメカニズムが見つかりませんでした。とにかく、RedisOperationsSessionRepositoryは問題を解決しません。 CSRF保護トークンの使用は、同時の変更を検出する非常に興味深い考えです。私はそれを試してみましょう。 – user7252656