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

发布于 2022-09-01 13:07:13 字数 5051 浏览 8 评论 0

转:lym6520

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

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

    前端通过Ext.Ajax.request的requestcomplete事件来进行session过期验证处理的:
Js代码
  1. // Default headers to pass in every request   
  2.     Ext.Ajax.defaultHeaders = {   
  3.         'Request-By': 'Ext' //标识ajax请求   
  4.     };   
  5.       
  6.     // ajax回调函数处理系统退出         
  7.     Ext.Ajax.on('requestcomplete',checkSessionStatus, this);            
  8.     function checkSessionStatus(conn,response,options){   
  9.         var json = Ext.decode(response.responseText);   
  10.         if(typeof json == 'object'   
  11.             && !json.success   
  12.             && json.timeout){   
  13.             alert("登入超时,系统将自动跳转到登陆页面,请重新登入!");   
  14.             top.window.location.href = json.redirectUri;                              
  15.         }   
  16.                  
  17.     }   
复制代码从上面的js代码中,注意下面这行代码:
Js代码
  1. // Default headers to pass in every request   
  2.     Ext.Ajax.defaultHeaders = {   
  3.         'Request-By': 'Ext' //标识ajax请求   
  4.     };  
复制代码需要设置请求的头信息来标识ajax请求,过滤器在处理请求的时候就是通过请求的头信息Request-By值是否为Ext来判断是否为Ext的异步请求的,然后在做出不同的响应。

1.gif (16.29 KB, 下载次数: 1)

下载附件

2011-01-14 13:35 上传



最后看看过滤器的处理方式,以下是session超时处理的部分的代码:
Java代码
  1. String ajaxTag = req.getHeader("Request-By");//Ext
  2.                        
  3.                         if(ajaxTag == null || !ajaxTag.trim().equalsIgnoreCase("Ext")){
  4.                                 resp.sendRedirect(this.redirectUri);
  5.                         }else{
  6.                                 resp.addHeader("sessionstatus", "timeout");
  7.                                 Map<String, Object> result = new HashMap<String, Object>();
  8.                                 result.put("success", false);
  9.                                 result.put("timeout",true);
  10.                                 result.put("redirectUri", this.redirectUri);
  11.                                 PrintWriter out = resp.getWriter();
  12.                                 out.print(Json.object2Json(result));
  13.                                 out.flush();
  14.                                 out.close();
  15.                         }
复制代码通过判断是否为Ext的异步请求,来做出不同的动作处理:直接跳转到登入页面或输出session过期信息由前台js事件拦截处理。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文