解决ajax请求filter重定向失败

解决ajax请求filter重定向失败

原创  2016年11月28日 18:33:48


参考引用方法

在新项目写了一个filter,能拦截jsp,.action的请求,但是ajax的请求可以拦截不能实现重写向登录页面。这是一个bug呀!

 参考以上引用的方法,解决了。

ajax重定向的问题。

默认ajax是不支持重定向的,因为ajax本身就是局部刷新,不重新加载页面的。如果需要用到重定向可以通过以下方法:

第一步:filter

[java]  view plain  copy
  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
  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. });  



 
u013997090
  • u013997090
    2017-08-17 19:141楼
  • 很好,解决了我的问题
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值