Я обрабатываю сеанс в JSF 2.0 с использованием фильтра. Вот код
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
HttpSession session = httpServletRequest.getSession(false);
if (session == null) {
//session timeout check.
if (httpServletRequest.getRequestedSessionId() != null && !httpServletRequest.isRequestedSessionIdValid()) {
System.out.println("Session has expired");
session = httpServletRequest.getSession(true);
session.setAttribute("logedin", "0"); // public user
httpServletResponse.sendRedirect(timeoutPage);
} else {
session = httpServletRequest.getSession(true);
session.setAttribute("logedin", "0");
filterChain.doFilter(httpServletRequest, httpServletResponse);
}
}
} //end of doFilter()
Но проблема в том, что когда сеанс истекает, и если пользователь нажимает кнопку "Назад", он получает страницу со всем стилем. Есть ли в любом случае, что, когда сессия истекает, и если пользователь нажмет кнопку "Назад назад", то он направит на timeoutPage.
Еще одно, что я также использую компонент Prime Faces на своей странице, например, datatable. Я использую разбиение на страницы. Если сеанс отключен, и я нажимаю на разбиение на страницы, то сообщение об истечении сеанса не отображается. Кажется, что запрос ajax не вызывает фильтр? Как я могу подключить свои события ajax, или вы можете сказать, что данные о постраничной разбивке на страницы до истечения срока действия сеанса?
Спасибо