2014-11-07 1 views
0

Версия:Invalidate Http сессия в JSF2 на Выходе

Apache 2.1.14 MyFaces

Rich Faces 4.3.5

Издание:

Я хочу аннулировать JSF сеанс, когда пользователь нажимает на Страница выхода. Я решил использовать PreRenderViewEvent для этого же. Ниже приведена схема для тех же:

Когда отображается страница выхода из системы, вызовите метод слушателя в боковом конце через PreRenderViewEvent. Недействительный сеанс JSF в java-методе как: FacesContext.getCurrentInstance().getExternalContext().invalidateSession();

Мой вопрос: правильно ли это в аннулировании сеанса? Или есть ли лучший подход?

Код:

<!-- call this in Logout.xhtml page --> 
<f:event listener="#{bean.invalidateSession}" type="preRenderView" /> 

EDIT 1:

Позвольте мне уточнить контекст вопроса. У меня есть два веб-приложения в моей системе. Когда пользователь нажимает кнопку «Выход», он всегда переходит в webApp1. Требование состоит в том, чтобы аннулировать сеанс в webApp1, а затем перенаправить на webApp2, где снова недействителен сеанс. Событие preRenderView будет использоваться при визуализации страницы Webapp1 LogOut. Слушатель будет сессию недействительной и перенаправлять на странице выхода webapp2 как ниже код:

public void logOut(ComponentSystemEvent event) throws IOException{ 

      //logoutAction param will be read from request 
      String redirectUrl = "/webapp2/Logout.xhtml?action="+logoutAction; 
      FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); 
      FacesContext.getCurrentInstance().getExternalContext().redirect(redirectUrl); 

} 

ответ

0

Я обычно просто добавить кнопку в шаблон:

<h:commandLink action="#{loginBean.logout()}" value="Logout" rendered="#{!empty loginBean.account}" /> 

Эта кнопка вызывает мой «логин» менеджер боб , который содержит атрибут Account account, заполненный параметрами пользователя. Он также отображается только в том случае, если пользователь подключен.

public String logout() 
{ 
    setAccount(null); 
    FacesContext.getCurrentInstance().getExternalContext().getSessionMap().clear(); 
    FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); 

    NavigationUtils.redirect("/admin/login"); 
    return ""; 
} 
Смежные вопросы