2014-06-17 37 views
-1

在這裏,我將我的代碼Spring安全+ jsf應用程序;當會話超時重定向到登錄頁面問題

https://gist.github.com/priyankahdp/be578a92f55d29702928

在我的控制檯沒有顯示任何錯誤。但會話超時後沒有頁面重定向。 但其稱爲SessionTimeoutFilter的doFilter()當任何形式的活動調用

但頁面視圖正如前面 沒有重定向方法

pleaes幫我這個問題

感謝

理清
+0

是您的代碼爲非ajax請求工作?我認爲在完全ajax請求之後,你需要比response.redirect更多的重定向。你可以閱讀http://javaevangelist.blogspot.com/2013/01/jsf-2x-tip-of-day-ajax-redirection-from.html –

+0

@BlueOcean: ohhhh謝謝sooo很親愛的朋友...它的工作:-) –

+0

歡迎您:) –

回答

0
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; 

     // is session expire control required for this request? 
     if (isSessionControlRequiredForThisResource(httpServletRequest)) { 
      // is session invalid? 
      if (isSessionInvalid(httpServletRequest)) { 
       /**/ 


       String redirectURL = httpServletResponse.encodeRedirectURL(httpServletRequest.getContextPath() +"/"+ getTimeoutPage()); 

       if (isAJAXRequest(httpServletRequest)) { 
        StringBuilder sb = new StringBuilder(); 
        sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><partial-response><redirect url=\"").append(redirectURL).append("\"></redirect></partial-response>"); 
        httpServletResponse.setHeader("Cache-Control", "no-cache"); 
        httpServletResponse.setCharacterEncoding("UTF-8"); 
        httpServletResponse.setContentType("text/xml"); 
        PrintWriter pw = response.getWriter(); 
        pw.println(sb.toString()); 
        pw.flush(); 
       }else{ 
        String timeoutUrl = httpServletRequest.getContextPath()+ "/" + getTimeoutPage(); 
        logger.info("session is invalid! redirecting to timeoutpage : "+ timeoutUrl); 
        httpServletResponse.sendRedirect(timeoutUrl); 
       } 

       return; 
      } 
     } 
    } 
    filterChain.doFilter(request, response); 
} 

private boolean isAJAXRequest(HttpServletRequest request) { 
    boolean check = false; 
    String facesRequest = request.getHeader("Faces-Request"); 
    if (facesRequest != null && facesRequest.equals("partial/ajax")) { 
     check = true; 
    } 
    return check; 
} 

這是完美的工作:-)

特別感謝您對親愛的朋友藍海

相關問題