Como redirecionar para a página de login quando a sessão expira?
Eu tenho três módulos da web JSF 2.0 e preciso redirecionar para a página de login quando a sessão expirar.
Eu tentei usando umHttpSessionListener
, está chamando osessionDestroyed()
método de evento, mas não consigo encaminhar / redirecionar a solicitação para lá. Eu acho que é porque não háHttpServletRequest
eHttpServletResponse
objetos.
Eu também tentei usando umPhaseListener
, mas resulta em um erro "muitos redirecionamentos" no navegador da web.
public class SessionListener implements PhaseListener {
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
public void beforePhase(PhaseEvent event) {
if (!FacesContext.getCurrentInstance().isPostback()) {
try {
System.out.println("Session Destroyed");
FacesContext.getCurrentInstance().getExternalContext().redirect("login.jsf");
}
catch (Exception e) {
System.out.println("error" + e);
}
}
}
public void afterPhase(PhaseEvent event) {
try {
System.out.println("Session Created");
}
catch (Exception e) {
System.out.println("error" + e);
}
}
}
Por que essas tentativas não funcionam e como posso resolvê-las da melhor forma?