2009-07-26 2 views
3

Я использую класс для сеанса, который расширяет org.apache.wicket.protocol.http.WebSession; Мне нужен метод, который вызывается, когда этот сеанс истекает вследствие выхода из системы или тайм-аута. но я ничего не нашел. Как мне это сделать?Wicket session Expiration

+0

Помогите нам помочь вам, сообщив нам, что вам нужно делать, когда сеанс истекает. Это может помочь найти решение вашей проблемы. В качестве побочного примечания: Не могли бы вы обработать «все, что вам нужно», если поймать исключение PageExpiredException (может или не придет)? – Tim

ответ

7

Вы можете сделать это на уровне калитки, как это:

пути переопределения SessionStore реализации - переопределения Application # 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() 
      } 

     }; 
    } 

но имеет недостаток: когда истекает срок сеанса (который constroled сервлет контейнер) этот код не будет вызываться. Другими словами - вы можете обрабатывать только событие уничтожения сеанса, вызванное самой калиткой.

На глобальном уровне можно использовать Servlet API, HttpSessionListener - вы можете среагировать на сессии уничтожить все, что событие было вызвано

HttpSesionListener#sessionDestroyed(HttpSessionEvent se) 

и записать это на свой WEB-INF/web.xml

<listener> 
    <listener-class> 
    your.listener.class.full.qualified.name 
    </listener-class> 
</listener> 
0

Session.java имеет метод обратного вызова, который выполняется, когда сеанс пользователя недействителен или из-за истечения срока действия HttpSession.

public void onInvalidate(){ 
}