Как перенаправить на страницу входа после окончания сеанса?

У меня есть три веб-модуля JSF 2.0, и мне нужно перенаправить на страницу входа в систему по окончании сеанса.

Я пробовал это с помощьюHttpSessionListenerзоветsessionDestroyed() Метод события, но я не могу переслать / перенаправить запрос там. Я думаю, потому что нетHttpServletRequest а такжеHttpServletResponse объекты.

Я также попробовал это с помощьюPhaseListener, но это приводит к «слишком большому количеству перенаправлений» ошибка в веб-браузере.

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);
        }
    }

}

Почему эти попытки не работают и как я могу решить их лучше?

Ответы на вопрос(2)

Ваш ответ на вопрос