2016-10-10 29 views
0

繼在我的網頁過濾代碼:重定向不工作時是無效的會話

private final String sessionExpiredPage = "/exception/sessionexpired.xhtml"; 

private final String loginPage = "/login.xhtml"; 

@Override 
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) 
     throws IOException, ServletException { 
    try { 

     final HttpServletRequest req = (HttpServletRequest) request; 
     final HttpServletResponse res = (HttpServletResponse) response; 
     final HttpSession session = req.getSession(false); 

     final String reqURI = req.getRequestURI(); 

     if (isRequireSessionControl(req) && isSessionInvalid(req)) { 
      res.sendRedirect(req.getContextPath() + sessionExpiredPage); 
     } else { 

      if (reqURI.indexOf(sessionExpiredPage) >= 0 || reqURI.indexOf(loginPage) >= 0 || (session != null 
        && session.getAttribute("username") != null) || reqURI.contains("javax.faces.resource")) { 
       chain.doFilter(request, response); 
      } else { 
       res.sendRedirect(req.getContextPath() + "/login.xhtml"); 
      } 
     } 
    } catch (final Exception e) { 
     e.printStackTrace(); 
    } 
} 

它背後的理念是: 第一次用戶調用的URL,他將被重定向到login.xhtml 。這很好。在web.xml中定義的一段時間之後,會話無效。

過濾器識別嘗試重定向到「sessionExpiredPage」的無效會話。但它不會重定向,而是會顯示當前頁面。

那麼,我的代碼有什麼問題,我在哪裏有我的錯誤? 。

回答

0

這是我自己給我的回答對所有的人誰感興趣的 的問題是當然的AJAX請求,解決方法很簡單:

我只是需要一個檢查,如果它是一個Ajax請求像:

final String facesRequest = request.getHeader("Faces-Request"); 
if (facesRequest != null && facesRequest.equals("partial/ajax")) { 
    //it is 
} 

,然後返回下面的xml:

final StringBuilder sb = new StringBuilder(); 
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><partial-response><redirect url=\"").append(req.getContextPath() + sessionExpiredPage).append("\"></redirect></partial-response>"); 
       res.setHeader("Cache-Control", "no-cache"); 
       res.setCharacterEncoding("UTF-8"); 
       res.setContentType("text/xml"); 
       final PrintWriter writer = res.getWriter(); 
       writer.println(sb.toString()); 
       eriter.flush(); 

這就是它和它的作品就像一個魅力。