1

わかった。私がやりたいのは、ユーザーを更新するときに、資格情報の更新を強制するために、ユーザーが現在持っているセッションを無効にすることができることです。セッション固有のユーザーデータに直接アクセスできるかどうかは気にしません。理想的には、同様の方法でユーザーを1つのセッションに制限することもできます。

私が試したのは、ユーザー名をキーとして、HttpSessionを値として使用してHashMapを作成することです(実際のセットアップはもう少し複雑ですが、一見不可解な失敗を繰り返した後、この簡単なテストに要約しました)。ただし、取得したHttpSessionに無効化するように指示しようとすると、現在の[admin]セッションが無効化されているように見えます。HttpSessionは現在のリクエストに密接にバインドされていますか?

それとも、これに対処するためのまったく異なる方法がありますか?

問題が発生した場合は、Jetty6.1.26を使用しています。

4

2 に答える 2

1

簡単な方法はありません。私が考えることができる最も簡単な方法は、データベース(またはcahche)にフラグを保持し、各要求でその有効性を確認することです。

または、HTTPセッションリスナーを実装して、アクセスおよび無効化できるユーザーセッションのHashMapを保持することもできます。

私はこれらのどれも試したことがないので、パフォーマンスの問題はわかりません。ただし、ほとんどのアプリケーションで許容できるはずです。

于 2012-12-10T08:14:42.067 に答える
0

まあ、私が知る限り、それを回避する方法はありません。リクエストスコープのBeanを使用すると、期待どおりに機能しませんでした(ただし、Springがどのように動作し、フィールドアクセスをインターセプトするかについての良い洞察が得られました)。最終的に、SessionHandler(セッションスコープのBean)でダーティフラグを使用し、非常に優先度の高いアスペクトチェックを行い、必要に応じて、ユーザーの次のリクエストでセッションでinvalidate()を呼び出しました。それでも、すべてのSessionHandlerをSessionManagerに登録し、@ PreDestroyメソッドを使用して登録を解除し、マップ内の多数のnullエントリを回避することになりました。

于 2012-12-21T03:19:38.797 に答える