Как перенаправить на страницу индекса, если в приложении JSF произошло время сеанса.
-
23-09-2019 - |
Вопрос
Я использую JSF RI 1.1. Как перенаправить на страницу индекса, если произойдет время сеанса?
Решение
Есть два способа, которые можно объединить:
Использовать
<meta>
обновить заголовок в HTML<head>
элемент в сочетании сHttpSession#getMaxInactiveInterval()
который возвращает остаток секунд, сессия еще не прожила.<meta http-equiv="refresh" content="${pageContext.session.maxInactiveInterval};url=index.jsf">
Этот подход автоматически перенаправляет страницу на данную
url
Когда сеанс истекает.Ловить
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
, и т. Д.) В то время как сеанс истек.
Обратите внимание, что лично я предпочел бы промежуточную «страницу предупреждения с истекшим сессией" или предупреждение, чтобы избежать "WTF?" опыт и, таким образом, улучшить пользовательский опыт. Более того, я бы также предпочел стрелять в аяксический опрос каждую минуту, когда клиент проявлял активность, прослушивая click
а также keypress
, так что жизнь сессии может быть отложена больше.
Другие советы
Вы можете использовать Filter
Чтобы поймать конкретное исключение, указывающее тайм -аут, и перенаправить оттуда.
JSF2:
<meta http-equiv="refresh" content="#{facesContext.externalContext.sessionMaxInactiveInterval};url=#{request.contextPath}/index.xhtml"/>