解决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. });  
相关文章
相关标签/搜索