2012-10-10 26 views
9

私はweb.xmlにリスナーとしてHttpSessionEventPublisherを追加したWebアプリケーションを持っています。 WebアプリケーションはJetty 7.xで動作し、Spring 3.1.1を使用しています。Springセッション処理:HttpSessionDestroyedEventが受信されない

これは、Springコンテキストのイベントリスナーに対してHttpSessionCreatedEventHttpSessionDestroyedEventを起動することになっています。

私はApplicationListener<ApplicationEvent>を実装するBean(@Controller)を持っています。 ApplicationEventは、HttpSessionCreatedEventHttpSessionDestroyedEventという共通の親クラスです。今私のWebアプリケーションにログインしたりログアウトしたりすると、これらのイベントがonApplicationEvent(ApplicationEvent event)メソッドに送信されることが期待されます。リクエスト処理イベントのような他のイベントも受け取りましたが、予想されるイベントは表示されませんでした。私はアプリケーションを少しトレースしたが、HttpSessionEventPublisherは明らかにイベントをコンテキストに起動するが、リスナーには近づかない。ここで私は何を欠場するのですか?

答えて

8

HttpSessionEventPublisherは、javadocごとに「Spring Root WebApplicationContext」にイベントを発行します。これはweb.xmlファイルのContextLoaderListenerエントリによって登録されたアプリケーションコンテキストです。一方、あなたの@ControllerはおそらくDispatcherServletで登録されたものとは別のアプリケーションコンテキストを通して登録されています。ですから、別のApplicationListenerを作成し、それをRoot WebapplicationContextに登録してから、イベントを処理する必要があります。

0

同様の問題に直面して、ApplicationListenerをルートコンテキストに移動できない場合は、org.springframework.security.context.DelegatingApplicationListenerを使用できます。

ちょうどあなたの豆でDelegatingApplicationListenerをautowireとDelegatingApplicationListenerに対するあなたのリスナーを登録するには、コンストラクタ/ @PostConstructを使用します(1は、ばねセキュリティによって所定の位置に既にあるべき)

関連する問題