Всем доброго времени суток. Столкнулся с непонятным поведением кода. Речь идет о фильтрах в primefaces. Дело в том что просмотрев много разной информации в просторах интернета решил выполнить задачу именно с помощью них. Нужно просто отловить закрытие сессии и сделать редирект на определенную страницу. Вот мой класс-фильтр
| Код | public class SessionTimeoutFilter implements Filter{ private boolean firstCheck = true; //private String timeoutPage = "timeout.xhtml"; private String timeoutPage = "https://www.google.com.ua"; public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { if ((request instanceof HttpServletRequest) && (response instanceof HttpServletResponse)) { HttpServletRequest httpServletRequest = (HttpServletRequest) request; HttpServletResponse httpServletResponse = (HttpServletResponse) response; if (isSessionControlRequiredForThisResource(httpServletRequest)) { if (isSessionInvalid(httpServletRequest)) { httpServletResponse.sendRedirect("/timeout.xhtml"); firstCheck = true; return; } } } filterChain.doFilter(request, response); } private boolean isSessionControlRequiredForThisResource(HttpServletRequest httpServletRequest) { String requestPath = httpServletRequest.getRequestURI(); boolean controlRequired = !requestPath.contains(getTimeoutPage()); return controlRequired; } private boolean isSessionInvalid(HttpServletRequest httpServletRequest) { boolean sessionInvalid = (httpServletRequest.getRequestedSessionId() != null) && !httpServletRequest.isRequestedSessionIdValid(); if(firstCheck) if(httpServletRequest.getSession().isNew()){ sessionInvalid = false; firstCheck = false; } return sessionInvalid; } public void destroy() { } public String getTimeoutPage() { return timeoutPage; } public void setTimeoutPage(String timeoutPage) { this.timeoutPage = timeoutPage; } }
|
И дело в том, что именно когда нужные условия выполняются и должен происходить редирект, то метод как таковой вызывается (видно через дебаггер), а по сути редирект не происходит. Эксперимента ради вызывал метод sendRedirect до проверок и все работало. Фильтр ловил реквест и сходу же направлял меня на нужную страницу. Видать дело в том что когда сессия истекает, то и редирект не срабатывает. На форумах пишут что должно работать, а по факту нет =( Подскажите, пожалуйста, в чем может быть проблема. Вот на всякий случай как я указал фильтр в xml
| Код | <filter> <filter-name>SessionTimeoutFilter</filter-name> <filter-class>ua.obriy.controller.general.SessionTimeoutFilter</filter-class> </filter> <filter-mapping> <filter-name>SessionTimeoutFilter</filter-name> <url-pattern>*.xhtml</url-pattern> </filter-mapping>
|
Заранее благодарен.
|