为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 拦截EXT请求的过滤器

拦截EXT请求的过滤器

2018-03-09 4页 doc 16KB 10阅读

用户头像

is_435706

暂无简介

举报
拦截EXT请求的过滤器拦截EXT请求的过滤器 关于配置项目中应用ExtJs开发的拦截器,针对session过期后,点击任何操作都让页面跳转到登录界面。 编写好一个拦截器,先按常规配置好(那些配置拦截器的细节就不用说了吧,不会的请看下关于struts2的拦截器定义及其在struts.xml文件中的配置)。 先在拦截器里面判断session中是否存在’用户信息’,如果不存在则跳转到登录界面: public String intercept(ActionInvocation arg0) throws Exception { HttpSession...
拦截EXT请求的过滤器
拦截EXT请求的过滤器 关于配置项目中应用ExtJs开发的拦截器,针对session过期后,点击任何操作都让页面跳转到登录界面。 编写好一个拦截器,先按常规配置好(那些配置拦截器的细节就不用说了吧,不会的请看下关于struts2的拦截器定义及其在struts.xml文件中的配置)。 先在拦截器里面判断session中是否存在’用户信息’,如果不存在则跳转到登录界面: public String intercept(ActionInvocation arg0) throws Exception { HttpSession session = ServletActionContext.getRequest().getSession(); if(session.getAttribute("user") == null){ log.info("用户没登录或登录过期,不能访问"); return "relogin"; }else{ log.info("用户已经登录,继续访问"); } return arg0.invoke(); } 下面就开始对Ext部分进行拦截了,因为Ext中提交的最终都是属于Ajax异步提交,普通拦截器不做特殊处理,所以就还得在上面的代码里面做处理,如下所示: public String intercept(ActionInvocation arg0) throws Exception { HttpSession session = ServletActionContext.getRequest().getSession(); HttpServletResponse response = ServletActionContext.getResponse(); HttpServletRequest request = ServletActionContext.getRequest(); PrintWriter pw = response.getWriter(); if(session.getAttribute("user") == null){ String flag = ""; if(request.getHeader("X-Requested-With") != null && request.getHeader("X-Requested-With").equalsIgnoreCase("XMLHttpRequest")){ log.info("用户没登录或登录过期,不能访问"); response.setCharacterEncoding("text/html;charset=utf-8"); response.setContentType("text/html;charset=utf-8"); flag = "9999"; pw.write(flag); return null; }else{ log.info("用户没登录或登录过期,不能访问"); return "relogin"; } }else{ log.info("用户已经登录,继续访问"); } return arg0.invoke(); } 解释一下 上面的if判断: if(request.getHeader("X-Requested-With") != null && request.getHeader("X-Requested-With").equalsIgnoreCase("XMLHttpRequest")) 该判断就是针对Ext提交进行判断的,其中我设置了一个flag,该标志就是Ajax请求后回调方法中的内容;只有是Ext的Ajax请求时,那么才会输出这个标志。 最后在jsp页面上加上下面的js代码,当然,直接加在写Ext的js文件头部也行。 Ext.Ajax.on('requestcomplete',checkUserSessionStatus, this); function checkUserSessionStatus(conn,response,options){ var str = response.responseText; if(str == '9999'){ alert('连接已超时,请重新登录!'); window.parent.location = 'index.jsp'; } } 上面这段js的意思就是,注册Ajax的requestcomplete方法; 用过Ajax的人都会知道,Ajax提交之后有几个方法,个success,failure,还有一个就是complete ,complete的执行是这样的,不管该Ajax请求成功与否,到最后都是执行complete方法,所以我们可以在complete方法里面做些扫尾工作; 那上面的requestcomplete是Ext中的Ajax请求的complete方法,不管Ext中的Ajax请求是否正确执行与否,它都会执行,所以我们就可以用该方法做文章,然后通过 var str = response.responseText;拿到在拦截器中的那个flag标识,判断是否存在自己设定的那个特定值,如果存在就进行跳转, window.parent.location = 'index.jsp'; 我这里采用这句是因为我这个系统界面才用了frame框架,得先找到父框架然后才将index.jsp页面进行location; 这里基本上就完成了拦截器对Ext进行拦截跳转了;
/
本文档为【拦截EXT请求的过滤器】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索