2012-03-29 23 views
1

セッションスコープのバッキングBeanのメソッドを、ユーザーがログインした後に呼び出すようにしたいのですが、どうすればいいですか?春のセキュリティとJSF:ログイン時にバッキングBeanのメソッドを呼び出しますか?

環境:Spring Security 3.0.x、Spring 3.0.xおよびJSF 1.2。バッキングビーンズはSpringによって管理されています。

背景:セッションはログインせずに作成されます。セッションスコープのBeanには、初期設定のデフォルト値が設定されています。ログイン後、私はその特定のユーザーのデータベースに保存されている設定にセッション状態を更新したいと思います。これを達成するために、インターフェースを想像したり、注釈付きのメソッド(例えば@PostLogin)をもっと簡単に想像しましたが、これまでのところ見つからないことがありました。

プリンシパル変更ごと、つまりログアウト時にそのメソッドが呼び出されれば問題ありません。また、他のセッションスコープのBeanは存続するはずですが、ログイン時にBean全体が破壊され再作成されても問題ありません。

私がこれまでに発見したことは次のとおりです。

  • ApplicationListener <AuthenticationSuccessEvent>は:リスナーが明らかにアプリケーションがスコープする必要があり、私は私のセッションへのアクセスを得ることができないが、それにBeanをスコープ。 @Autowiredとスコーププロキシが動作しません。注入されたオブジェクトは壊れています。実際のバッキングBeanには依存関係は含まれていません。
  • < form-login authentication-success-handler-ref = ".." >:これを試したことはありませんが、使用するログインプロシージャとは独立して呼び出されるメソッドが必要です。フォームベース以外の私たちはを覚えています。私はとプログラムによるログインを覚えています(パスワード忘れたプロセスの後に自動的にログインするなど)。自分の質問に答える

答えて

2

ApplicationListenerしかし@Autowiredではなかった、右のトラックでした。

セッションスコープのBeanで実装されている1つのメソッドでインターフェイスを定義しました。次に、(シングルトンスコープの)イベントリスナクラスは、ApplicationContext.getBeansOfType(..)を使用して、そのインタフェースによるセッションBeanを検索し、それぞれのインタフェースのメソッドを呼び出します。