Выход из сеанса / тайм-аут - PullRequest
1 голос
/ 03 марта 2011

Если коротко, вот сценарий:

  • Кнопка браузера должна быть функциональной (я использую JSF 2.0, так что это работает)

  • После выхода из системы, если пользователь нажимает кнопку «Назад», приложение должно перенаправить его / ее на страницу входа (не работает, пользователь может просматривать защищенные страницы, хотя срок их действия истек. Я не могу включить метатеги для отключения кэширования в браузере, потому что перестает работать кнопка «Назад»)

  • Если пользователь вызывает действие, нажав кнопку, на одной из страниц с истекшим сроком действия он должен перенаправить его / ее на страницу входа или ошибки (не работает, приложение выдает ошибку и показывает пустую страницу Моя реализация ExceptionHandlerWrapper обнаруживает исключение, и она использует NavigationHandler для изменения viewId и визуализации ответа (сопоставление FaceException на Face-Config, указывающее на login.jsf), но приложение ведет себя не так, как ожидалось)

Может кто-нибудь помочь мне решить эту проблему?

1 Ответ

1 голос
/ 03 марта 2011
  • Кнопка возврата браузера должна быть функциональной (я использую JSF 2.0, поэтому это работает)

  • После выхода из системы, если пользовательнажимает кнопку «назад», приложение должно перенаправить его на страницу входа в систему (не работает, пользователь может просматривать защищенные страницы, хотя срок действия истек. Я не могу включить метатеги, чтобы отключить кэширование в браузере, поскольку кнопка «Назад» перестает работать)

Два шага для решения этой проблемы.

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

    HttpServletResponse hsr = (HttpServletResponse) response;
    hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
    hsr.setHeader("Pragma", "no-cache"); // HTTP 1.0.
    hsr.setDateHeader("Expires", 0); // Proxies.
    chain.doFilter(request, response);
    
  2. Не использовать HTTP POST для постраничной навигации.Всегда используйте HTTP GET для перехода между страницами.Если вам нужно отправить форму, позвольте ей отправить себя (т.е. пусть метод действия возвращает null или void) и используйте h:messages или h:somecomponent rendered="#{success}" для условного отображения результатов на той же странице.


  • Если пользователь вызывает действие, нажав кнопку на одной из страниц с истекшим сроком действия, он должен перенаправить его / ее на страницу входа или страницу ошибки (не работает,приложение выдает ошибку и показывает пустую страницу. Моя реализация ExceptionHandlerWrapper обнаруживает исключение, и она использует NavigationHandler для изменения viewId и визуализации ответа (сопоставление "FaceException" на Face-Config, которое указывает на login.jsf), ноприложение работает не так, как ожидалось)

<error-page> на javax.faces.webapp.ViewExpiredException было достаточно.Смотри также этот ответ .

...