在我的Vaadin應用程序中,當「會話超時」消息之後Vaadin不會使會話無效時出現問題。得到這個消息後,用戶有時可以單擊鏈接或刷新頁面並繼續工作,就好像他們仍然被登錄 我使用下列參數:有時,Vaadin不會在「會話超時」消息之後使會話無效
closeIdleSessions=true
heartbeatInterval=60
session-timeout=15
末參數(會話超時)是因爲我沒有從vaadin文檔中得到清楚的結果,它在context.xml(session-timeout = 900)和web.xml(session-config/session-timeout = 15)中設置,是否有這樣的vaadin servlet參數。
有人問題嗎?
UPDATE 1:固定參數片段。
UPDATE 2:SessionDestroyListener.sessionDestroy
在出現Session expired
消息時未觸發。
UPDATE 3:之前的錯誤是由於代碼錯誤而出現的。現在SessionDestroyListener.sessionDestroy
被調用,但我無法訪問給定事件中的HttpSession
。
這裏是我的SessionDestroyListener
代碼(請注意,if
的一個分支評論):
private static class SynchronizerSessionDestroyListener implements SessionDestroyListener {
@Override
public void sessionDestroy(SessionDestroyEvent event) {
if (event.getSession() != null){
WrappedSession wrappedSession = event.getSession().getSession();
if (wrappedSession instanceof WrappedHttpSession){
WrappedHttpSession wrappedHttpSession = (WrappedHttpSession) wrappedSession;
HttpSession httpSession = wrappedHttpSession.getHttpSession();
if (httpSession != null){
try {
httpSession.invalidate();
logger.debug("Session '{}' was invalidated", httpSession.getId());
} catch (IllegalStateException e){
// do nothing, already invalidated
logger.debug("Session '{}' was already invalidated: {}", httpSession.getId(), e.getMessage());
}
} else {
logger.warn("Could not invalidate http session for vaadin session: http session is null"); // THIS IS THE BRANCH WHICH IS ACTUALLY GET EXECUTED ON 'SESSION EXPIRED' MESSAGE: event.getSession().getSession() is null!
}
} else {
logger.warn("Could not invalidate http session for vaadin session: event session is not an http session");
}
} else {
logger.warn("Could not invalidate http session for vaadin session: event session is null");
}
}
}
這裏是我連接監聽器:
public class X extends VaadinServlet {
// different class members
@Override
protected void servletInitialized() throws ServletException {
super.servletInitialized();
getService().addSessionDestroyListener(new SynchronizerSessionDestroyListener());
}
}
你可以發佈你的'網絡。 xml'看起來像那些參數?或者您是否使用註釋使用參數? – JDC