Ext异步请求session过期解决方案

本文固定链接:http://www.verydemo.com/demo_c107_i817.html

http://lym6520.iteye.com/blog/871092

Ext 异步请求session 过期解决方案

博客分类: EXT
EXTAjaxjson框架
    最近在开发后台管理系统,前台使用了Ext框架,在开发过程中,发现session 过期时客服端仍然不断的进行了N次 请求后才停止,我想很多使用过Ext框架开发的同学都遇到过同样的问题吧!今天我就来说说我的 解决方案吧!

    前端通过Ext.Ajax.request的requestcomplete事件来进行session 过期验证处理的:
Js代码 
// Default headers to pass in every request 
    Ext.Ajax.defaultHeaders = { 
        'Request-By': 'Ext' //标识ajax 请求 
    }; 
     
    // ajax回调函数处理系统退出       
    Ext.Ajax.on('requestcomplete',checkSessionStatus, this);          
    function checkSessionStatus(conn,response,options){ 
        var json = Ext.decode(response.responseText); 
        if(typeof json == 'object'  
            && !json.success  
            && json.timeout){ 
            alert("登入超时,系统将自动跳转到登陆页面,请重新登入!"); 
            top.window.location.href = json.redirectUri;                             
        } 
               
    }   


从上面的js代码中,注意下面这行代码:
Js代码 
// Default headers to pass in every request 
    Ext.Ajax.defaultHeaders = { 
        'Request-By': 'Ext' //标识ajax 请求 
    }; 


需要设置 请求的头信息来标识ajax 请求,过滤器在处理 请求的时候就是通过 请求的头信息Request-By值是否为Ext来判断是否为Ext的 异步请求的,然后在做出不同的响应。




最后看看过滤器的处理方式,以下是session超时处理的部分的代码:
Java代码 
String ajaxTag = req.getHeader("Request-By");//Ext 
             
            if(ajaxTag == null || !ajaxTag.trim().equalsIgnoreCase("Ext")){ 
                resp.sendRedirect(this.redirectUri); 
            }else{ 
                resp.addHeader("sessionstatus", "timeout");  
                Map<String, Object> result = new HashMap<String, Object>(); 
                result.put("success", false); 
                result.put("timeout",true); 
                result.put("redirectUri", this.redirectUri); 
                PrintWriter out = resp.getWriter(); 
                out.print(Json.object2Json(result)); 
                out.flush(); 
                out.close(); 
            } 



通过判断是否为Ext的 异步请求,来做出不同的动作处理:直接跳转到登入页面或输出session 过期信息由前台js事件拦截处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值