0

私たちの Web アプリケーション (Struts を使用する JBoss 内) では、主にセキュリティのためにセッションを使用し、ユーザーの一部のデータをキャッシュします。したがって、アプリケーションにログインしているすべてのユーザーは、セッションとさまざまなデータがキャッシュされています。

いくつかのパラメーターの変更に基づいて、ログインしている (つまり、セッションを持っている) ユーザーのサブセットのキャッシュを変更したい

これは達成できますか?一般的な検索ではこれまでのところ何も見つかりませんでした。

4

3 に答える 3

1

あなたが使用することができますHttpAttributeListener

ここでの基本的な例

HttpSessionAttributeListener:

HttpSessionAttributeListener インターフェイスを使用すると、オブジェクトは、特定の Web アプリケーション内のセッションの属性リストに対する変更を監視できます。HttpSessionAttributeListener は、java.util.EventListener を拡張します。その中のメソッドは

  • attributeAdded(HttpSessionBindingEvent se) - これは、属性がセッションに追加されたという通知です。
  • attributeRemoved(HttpSessionBindingEvent se) - これは、属性がセッションから削除されたという通知です。
  • attributeReplaced(HttpSessionBindingEvent se) - これは、属性がセッションで置き換えられたという通知です。
于 2013-01-31T14:50:13.293 に答える
1

各セッションオブジェクトをstatic List<Session>いくつかのホルダーオブジェクトに保存することでそれを行うことができます。で置くことができますHttpSessionListener#sessionCreated(..)。のリストから削除することを忘れないでくださいsessionDestroyed(..)

次に、何かをしたいときはいつでも、以前に保存されたセッションのリストをループして、好きなことをしてください。

于 2013-01-31T14:50:35.597 に答える
0

基本的に 2 つのオプションがあります。

  1. 変更をプッシュします。HttpSessionを使用して管理するアプリケーション全体のマップ内のすべてのインスタンスを取得しますHttpSessionListener。このようにして、アプリケーション スコープからそれらを取得し、それらをウォークスルーして必要な変更を直接行うことができます。

  2. 変更をポーリングします。アプリケーションスコープに変更指示を格納します。すべての HTTP 要求で、または を使用して変更が必要Filterかどうかを確認し、現在のセッションで必要な変更を行い、変更命令を削除/無効にします。ServletRequestListener

まったく別の代替手段は、Terracotta や Ehcache などのアプリケーション全体の共有キャッシュを使用することです。これにより、すべての HTTP セッションで同じデータを複製する必要がなくなります。リクエストごとにデータを処理するだけで済みます。JPA を使用してデータベース アクセスを理解したら、「第 2 レベルのキャッシュ」について読み進めてください。まさにそれが行われます。

于 2013-01-31T14:56:04.333 に答える