9

リスナーとしてweb.xmlを追加したWebアプリがあります。HttpSessionEventPublisherWebアプリはJetty7.xで実行され、Spring3.1.1を使用しています。

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

を実装するBean(@Controller)がありますApplicationListener<ApplicationEvent>。とApplicationEventの共通の親クラスです。Webアプリケーションにログインするか、Webアプリケーションからログアウトすると、これらのイベントがメソッドに対して発生することが予想されます。リクエスト処理イベントなどの他のイベントを受け取りましたが、予期されたイベントが表示されませんでした。私はアプリを少しトレースしましたが、間違いなくイベントをコンテキストに合わせて起動しますが、リスナーにアプローチしていません。ここで何が恋しいですか?HttpSessionCreatedEventHttpSessionDestroyedEventonApplicationEvent(ApplicationEvent event)HttpSessionEventPublisher

4

2 に答える 2

8

問題はHttpSessionEventPublisher、javadocごとに「SpringRoot WebApplicationContext」でイベントを公開することです。これは、ContextLoaderListenerweb.xmlファイルのエントリを通じて登録されたアプリケーションコンテキストです。一方、@ Controllerは、おそらくまったく別のアプリケーションコンテキスト(DispatcherServletを介して登録されたもの)を介して登録されます。したがって、別のApplicationListenerを作成し、それをルートWebapplicationContextに登録することをお勧めします。そうすれば、イベントが発生するはずです。

于 2012-10-10T00:36:02.407 に答える
0

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

BeanでDelegatingApplicationListenerを自動配線し、コンストラクター/ @PostConstructを使用して、リスナーをDelegatingApplicationListenerに対して登録します(1つはspring-securityによって既に配置されている必要があります)

于 2017-05-11T08:45:36.967 に答える