2012-10-10 5 views
9

Ich habe eine Web-App, wo in der web.xml ich die HttpSessionEventPublisher als Listener hinzugefügt habe. Die Web-App läuft auf Jetty 7.x und wir verwenden Spring 3.1.1.Spring Session-Behandlung: HttpSessionDestroyedEvent nicht erhalten

Dies soll HttpSessionCreatedEvent und HttpSessionDestroyedEvent zu Spring Context Event Listeners auslösen.

Ich habe eine Bean (@Controller), die ApplicationListener<ApplicationEvent> implementiert. ApplicationEvent ist die gemeinsame Elternklasse von HttpSessionCreatedEvent und HttpSessionDestroyedEvent. Wenn ich mich jetzt bei meiner Webanwendung anmelde oder mich von ihr abmelde, würde ich erwarten, dass diese Ereignisse an die Methode onApplicationEvent(ApplicationEvent event) gesendet werden. Ich habe andere Ereignisse erhalten, wie z. B. ein Ereignis zur Bearbeitung von Anfragen, aber die erwarteten Ereignisse wurden nicht angezeigt. Ich habe die App ein wenig nachverfolgt, die HttpSessionEventPublisher feuert das Ereignis definitiv auf den Kontext, aber der Hörer wird nicht angesprochen. Was vermisse ich hier?

Antwort

8

Das Problem ist, dass HttpSessionEventPublisher Ereignisse auf dem "Spring Root WebApplicationContext" über das Javadoc veröffentlicht, das ist der Anwendungskontext, der unter ContextLoaderListener Eintrag in Ihrer Datei web.xml registriert wird. Ihr @Controller wird dagegen wahrscheinlich über einen anderen Anwendungskontext registriert - den über das DispatcherServlet registrierten. Daher würde ich vorschlagen, dass Sie einen anderen ApplicationListener erstellen und ihn im Root WebapplicationContext registrieren. Die Ereignisse sollten dann durchkommen.

0

Angesichts eines ähnlichen Problems können Sie den org.springframework.security.context.DelegatingApplicationListener verwenden, wenn Sie Ihren ApplicationListener nicht in den Stammkontext verschieben können.

autowire Nur einen DelegatingApplicationListener in Ihrem Bean und verwendet Konstruktor/@PostConstruct Ihre Zuhörer gegen die DelegatingApplicationListener zu registrieren (man sollte vorhanden sein, bereits durch feder Sicherheit)

Verwandte Themen