【发布时间】:2012-04-03 17:02:54
【问题描述】:
我正在使用 filter 处理 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 组件,比如数据表。我正在使用分页。如果会话超时,并且我单击分页,则不会出现会话到期消息。似乎ajax请求不调用过滤器?如何连接我的 ajax 事件,或者您可以将数据表分页事件与会话到期联系起来?
谢谢
【问题讨论】:
标签: jsf-2