Подтвердить что ты не робот

Как перенаправить на страницу индекса, если время сеанса произошло в приложении jsf

Я использую JSF RI 1.1. Как перенаправить на индексную страницу, если происходит тайм-аут сеанса?

4b9b3361

Ответ 1

Существует два способа объединения:

  • Используйте заголовок <meta> refresh в элементе HTML <head> в сочетании с HttpSession#getMaxInactiveInterval(), который возвращает остаток секунд, который сеанс еще не прожил.

    <meta http-equiv="refresh" content="${pageContext.session.maxInactiveInterval};url=index.jsf">
    

    Этот подход автоматически перенаправляет страницу на заданный url, когда сеанс истекает.

  • Catch ViewExpiredException в web.xml:

    <error-page>
        <exception-type>javax.faces.application.ViewExpiredException</exception-type>
        <location>/index.jsf</location>
    </error-page>
    

    Этот подход автоматически перенаправит запрос на заданный <location>, когда был запущен запрос POST (h:commandButton, h:commandLink и т.д.), в то время как срок действия сеанса истек.

Обратите внимание, что я лично предпочел бы промежуточную страницу предупреждения "Session Expired" или предупреждение, чтобы избежать "wtf?". опытом и, таким образом, улучшить работу пользователей. Более того, я бы предпочел каждую минуту активировать адиаксический опрос, когда клиент показал активность, прослушивая click и keypress, так что время жизни сеанса может быть отложено больше.

Ответ 2

Вы можете использовать Filter, чтобы поймать конкретное исключение, указывающее время ожидания, и перенаправить оттуда.

Ответ 3

JSF2:

<meta http-equiv="refresh" content="#{facesContext.externalContext.sessionMaxInactiveInterval};url=#{request.contextPath}/index.xhtml"/>