2009-07-26 12 views
3

Ich verwende eine Klasse für Sitzung, die org.apache.wicket.protocol.http.WebSession erweitert; Ich brauche eine Methode, die aufgerufen wird, wenn diese Sitzung als Folge von Abmeldung oder Zeitüberschreitung abläuft. aber ich habe nichts gefunden. Wie kann ich es tun?Wicket-Sitzung Ablauf

+0

Helfen Sie uns, indem Sie uns sagen, was Sie tun müssen, wenn eine Sitzung abläuft. Dies könnte bei der Suche nach einer Lösung für Ihr Problem helfen. Als Randnotiz: Können Sie mit "was auch immer Sie tun müssen" umgehen, indem Sie eine PageExpiredException abfangen (die möglicherweise kommt oder nicht)? – Tim

Antwort

7

Sie können es wie folgt auf Wicket Ebene tun:

durch zwingende SessionStor Implementierung - Überschreibung Anwendung # newSessionStore()

@Override 
protected ISessionStore newSessionStore() { 
     return new SecondLevelCacheSessionStore(this, new DiskPageStore()) { 

      @Override 
      protected void onUnbind(String sessionId) { 
       // this code is called when wicket call httpSession.invalidate() 
      } 

     }; 
    } 

aber dies hat Nachteil: wenn Sitzung abläuft (die durch Servlet constroled ist Container) wird dieser Code nicht aufgerufen. Mit anderen Worten - Sie können nur Session Destroy Event behandeln, das durch Wicket selbst verursacht wird.

Auf globaler Ebene können Sie HttpSessionListener Servlet API verwenden - Sie auf Sitzung reagieren können Ereignis zerstören, was auch immer es durch

HttpSesionListener#sessionDestroyed(HttpSessionEvent se) 

und schreiben diese auf Ihre WEB-INF/web.xml

<listener> 
    <listener-class> 
    your.listener.class.full.qualified.name 
    </listener-class> 
</listener> 
ausgelöst wurde
0

Session.java verfügt über eine Rückrufmethode, die ausgeführt wird, wenn die Benutzersitzung ungültig wird oder aufgrund des Ablaufs von HttpSession.