ajax请求session过期失效被拦截的解决

通常使用过滤器 或拦截器来进行判断session或cookies里是否失效从而跳转页面,通常普通连接请求实现如下:

  1. UserInfo user = (UserInfo)request.getSession().getAttribute("user");  
  2. if(user == null) {  
  3.     response.sendRedirect("/login.html");  
  4. }  
UserInfo user = (UserInfo)request.getSession().getAttribute("user");
if(user == null) {
	response.sendRedirect("/login.html");
}


对于一个普通的页面没什么问题,但通过ajax请求拦截后却无法实现跳转,扑捉到登录的源代码,在网上查了很多资料
方法也是众说纷纭,有的ajaxSetup设置全局 后台拦截器中通过请求头部信息判断是否ajax请求然后返回参数判断,
有的则是修改jquery ajax源码,太多了 


查了资料搞了个最简单的后台不用判断前台 使用一个最方便的做了一次扩展 重写ajax方法实现前置处理,代码如下:

  1. jQuery(function($){  
  2.     // 备份jquery的ajax方法    
  3.     var _ajax=$.ajax;  
  4.     // 重写ajax方法,先判断登录在执行success函数   
  5.     $.ajax=function(opt){  
  6.         var _success = opt && opt.success || function(a, b){};  
  7.         var _opt = $.extend(opt, {  
  8.             success:function(data, textStatus){  
  9.                 // 如果后台将请求重定向到了登录页,则data里面存放的就是登录页的源码,这里需要找到data是登录页的证据(标记)  
  10.                 if(data!='[object Object]' && data.indexOf('weidenglu') != -1) {  
  11.                     window.location.href= "gz.html";  
  12.                     return;  
  13.                 }  
  14.                 _success(data, textStatus);   
  15.                   
  16.             }    
  17.         });  
  18.         _ajax(_opt);  
  19.     };  
  20. });  
jQuery(function($){
    // 备份jquery的ajax方法  
    var _ajax=$.ajax;
    // 重写ajax方法,先判断登录在执行success函数 
    $.ajax=function(opt){
    	var _success = opt && opt.success || function(a, b){};
        var _opt = $.extend(opt, {
        	success:function(data, textStatus){
        		// 如果后台将请求重定向到了登录页,则data里面存放的就是登录页的源码,这里需要找到data是登录页的证据(标记)
        		if(data!='[object Object]' && data.indexOf('weidenglu') != -1) {
        			window.location.href= "gz.html";
        			return;
        		}
        		_success(data, textStatus); 
        		
            }  
        });
        _ajax(_opt);
    };
});

将其代码写到 一个通用的js文件中 页面调用一下即可 ,每个ajax执行之前都会执行它,data!='[object Object]' data.indexOf('weidenglu'),
data 返回值如果是 判断里面是否存在weidenglu  ,weidenglu在你的login.html页面中写上一个隐藏域即可 因为一旦被拦截未登录返回的就是登录的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值