2014-02-20 4 views
4

Кажется, я столкнулся с стеной с реализацией SessionListener в XPages. Слушатель печатает вывод в журнал при создании сеанса, поэтому я знаю его правильно зарегистрированный. Однако при выходе из системы он не вызывает sessionDestroyed. Есть ли какая-либо специальная переадресация URL, которую мне нужно выполнить, чтобы сразу же после выхода из системы уничтожить сеанс Domino/XPage? Как вы видите, я попытался очистить области и очистить куки, пытаясь запустить метод sessionDestroyed. Обратите внимание, что sessionDestroyed вызывает вызов при перезагрузке задачи http-сервера, поэтому кажется, что сеансы могут задерживаться до таймаута бездействия.SessionListener sessionDestroyed not called

Дев Сервер: 9.0.1 (64 бит, работает локально на Win7) Запуск одного сервера аутентификации на основе сеансов (примечание: я попытался основную AUTH, та же проблема)

выхода из системы (служебный метод вызывается SSJS):

public static void logout(){ 


    String url = XSPUtils.externalContext().getRequestContextPath() + "?logout&redirectto=" + externalContext().getRequestContextPath(); 
    XSPUtils.getRequest().getSession(false).invalidate(); 

    //wipe out the cookies 
    for(Cookie cookie : getCookies()){ 
     cookie.setValue(""); 
     cookie.setPath("/"); 
     cookie.setMaxAge(0); 
     XSPUtils.getResponse().addCookie(cookie); 
    } 

    try { 
     XSPUtils.externalContext().redirect(url); 
    } catch (IOException e) { 
     logger.log(Level.SEVERE,null,e); 
    } 
} 

простой слушатель сессии:

public class MySessionListener implements SessionListener { 

public void sessionCreated(ApplicationEx arg0, HttpSessionEvent event) { 
    System.out.println("***sessionCreated***"); 

} 

public void sessionDestroyed(ApplicationEx arg0, HttpSessionEvent event) { 
    System.out.println("***sessionDestroyed***"); 
} 

}

+0

Помогает ли это? http://stackoverflow.com/a/11183463/785061 –

+0

Благодарим вас за отзыв. Я нашел этот пост во время моего исследования проблемы. Моя проблема связана не с созданием сеанса, либо с регистрацией слушателя (sessionCreated is firing). Имеет отношение к sessionDestroy после аннулирования HttpSession и выполнения перенаправления выхода. Этот метод не будет срабатывать, пока я не перезапущу http и/или не жду тайм-аута. –

+0

Вы попробовали [ExtLib Logout Control] (http://notesin9.com/index.php/2012/03/09/notesin9-049-xpages-login-and-logout/)? – stwissel

ответ

5

Мы смотрим на соединение традиционного поведения стека «? Logout» с уровнем управления сеансом XPages. В настоящее время сеансы отбрасываются в зависимости от истечения времени ожидания сеанса и/или перезагрузки HTTP-стека. Если вы хотите принудительно удалить сеанс и вызвать вызванный вами SessionListener.sessionDestroyed, обратитесь к следующему фрагменту XSP - это применимо для переноса на Java:

<xp:button value="Logout" id="button2"> 
    <xp:eventHandler event="onclick" submit="true" 
     refreshMode="complete"> 
     <xp:this.action> 
      <![CDATA[#{javascript: 
       // things we need... 
       var externalContext = facesContext.getExternalContext(); 
       var request = externalContext.getRequest(); 
       var response = externalContext.getResponse(); 
       var currentContext = com.ibm.domino.xsp.module.nsf.NotesContext.getCurrent(); 
       var session = request.getSession(false); 
       var sessionId = session.getId(); 

       // flush the cookies and invalidate the HTTP session... 
       for(var cookie in request.getCookies()){ 
        cookie.setValue(""); 
        cookie.setPath("/"); 
        cookie.setMaxAge(0); 
        response.addCookie(cookie); 
       } 
       session.invalidate(); 

       // now nuke the XSP session from RAM, then jump to logout... 
       currentContext.getModule().removeSession(sessionId); 
       externalContext.redirect("http://foo/bar.nsf?logout"); 
      }]]> 
     </xp:this.action> 
    </xp:eventHandler> 
</xp:button> 
+0

Портируя ваш ssjs-фрагмент на мой метод jout logout, мой слушатель теперь вызывается при выходе из системы. благодаря! Вы также должны опубликовать это на XSnippets. –