解決ajax請求filter重定向失敗

 

2016-11-28 18:33 265人閱讀 評論(0) 收藏 舉報javascript

 分類:java

項目中遇到的問題記錄(6) ajax

版權聲明:本文爲博主原創文章,未經博主容許不得轉載。session

 

 

參考引用方法app

 

在新項目寫了一個filter,能攔截jsp,.action的請求,可是ajax的請求能夠攔截不能實現重寫向登陸頁面。這是一個bug呀!jsp

 參考以上引用的方法,解決了。ide

 

ajax重定向的問題。ui

默認ajax是不支持重定向的,由於ajax自己就是局部刷新,不從新加載頁面的。若是須要用到重定向能夠經過如下方法:url

第一步:filterspa

 

[java] view plain copy

 在CODE上查看代碼片派生到個人代碼片

  1. public class AgentLoginFilter extends HttpServlet implements Filter{  
  2.     private static final Log log = LogFactory.getLog(AgentLoginFilter.class);  
  3.     @Override  
  4.     public void init(FilterConfig filterConfig) throws ServletException {  
  5.           
  6.     }  
  7.     @Override  
  8.     public void doFilter(ServletRequest sRequest, ServletResponse sResponse, FilterChain filterChain)  
  9.             throws IOException, ServletException {        
  10.          HttpServletRequest request = (HttpServletRequest) sRequest;          
  11.          HttpServletResponse response = (HttpServletResponse) sResponse;          
  12.          HttpSession session = request.getSession();          
  13.          String url=request.getServletPath();      
  14.          String contextPath=request.getContextPath();     
  15.          String type = request.getHeader("X-Requested-With")==null?"":request.getHeader("X-Requested-With");// XMLHttpRequest  
  16.          String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ contextPath + "/";  
  17.          if(url.equals("")){  
  18.              url+="/agent";    
  19.          }           
  20.          boolean isHasLogin = AgentSessionHelper.getHasLogined(request.getSession());  
  21.          if(!isHasLogin){  
  22.              if((url.startsWith("/agent") && !url.startsWith("/agent/login/YSAgentLoginAction/login.action"))  
  23.                      && !url.startsWith("/agent/agentLogin.jsp")){  
  24.                    
  25.                  if (StringUtils.equals("XMLHttpRequest", type)) {  
  26.                     // 處理ajax請求  
  27.                     response.setHeader("SESSIONSTATUS", "TIMEOUT");  
  28.                     response.setHeader("CONTEXTPATH", basePath+"agent/agentLogin.jsp");  
  29.                     response.setStatus(HttpServletResponse.SC_FORBIDDEN);  
  30.                     return;  
  31.                 }else{  
  32.                     response.sendRedirect(contextPath+"/agent/agentLogin.jsp");    
  33.                     return;  
  34.                 }  
  35.              }   
  36.          }else{  
  37.              if(url.startsWith("/agent/agentLogin.jsp")){  
  38.                  response.sendRedirect(contextPath+"/agent/agentIndex.jsp");    
  39.                  return;     
  40.              }  
  41.          }  
  42.            filterChain.doFilter(sRequest, sResponse);    
  43.     }  
  44. }  

 

第二步:在公共js 中寫入

經過$.ajaxSetup()方法給ajax方法統一添加請求執行結束後,執行的操做。

 

[javascript] view plain copy

 在CODE上查看代碼片派生到個人代碼片

  1. $.ajaxSetup( {  
  2.     //設置ajax請求結束後的執行動做  
  3.     complete :   
  4.     function(XMLHttpRequest, textStatus) {  
  5.         // 經過XMLHttpRequest取得響應頭,sessionstatus  
  6.         var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus");  
  7.         if (sessionstatus == "TIMEOUT") {  
  8.             var win = window;  
  9.             while (win != win.top){  
  10.                 win = win.top;  
  11.             }  
  12.                 win.location.href= XMLHttpRequest.getResponseHeader("CONTEXTPATH");  
  13.         }  
  14.     }  
  15. });  
相關文章
相關標籤/搜索