摘要:问题问题来了,都是采用向后台发送请求,这时候如果重定向到无权限的错误页面就会产生问题。最直接的解决方案就是,每一个向后台发送的请求,后台都会返回,然后判断,不符合条件就。
首先要明确的是,ajax是局部刷新,是不支持重定向的,只能通过window.location.href="http://xxx/error.html"的方式实现,在后台重定向只会把html返回给前台,页面并不会跳转。
需求
首先我们项目采用的是extJs做UI框架,后台是SSM。现在项目要加入简单数据权限过滤的功能,于是我使用过滤器,获取用户访问的接口地址,判断只要与session中的可以访问的数据接口权限不匹配,那么就跳转到无权限的错误页面。
问题
问题来了,ExtJs都是采用ajax向后台发送请求,这时候如果重定向到无权限的错误页面就会产生问题。最直接的解决方案就是,每一个向后台发送的ajax请求,后台都会返回message,然后判断messsage,不符合条件就window.location.href="http://xxx/error.html"。但是,如果初期有这样的设计就好了,但我这个项目是后期才加权限的功能,如果一个个改起来,肯定是不可能的。
解决方法
解决方法1
新建一个js文件,添加如下代码:
//为Ext的ajax添加监听 //requestcomplete:请求完成 Ext.Ajax.addListener("requestcomplete",function(conn, response, options, eOpts){ //后台也可以放入请求头还获取错误信息,前台通过`response.getAllResponseHeaders()`来获取 //var msg = response.getAllResponseHeaders(); if(response.responseText.indexOf("error") != -1){ window.location.href="http://xxx/error.html"; } },this);
一般我们的项目都是一个主的main.jsp,然后里面一个个ExtJs的iframe,所以在main.jsp中直接引入刚才新建的js,当ajax请求完成后,接收到后台返回的message,不符合条件,跳转到错误页面。
解决方法2
方法2比较通用也比较简单,直接在filter中使用out.print输出一段js进行跳转。
UserVo u = (UserVo) session.getAttribute("user"); if (u == null) { PrintWriter out = res.getWriter(); if (req.getHeader("x-requested-with") != null && req.getHeader("x-requested-with").equals("XMLHttpRequest")) { String message = path + "/user/loginHome"; out.print(message); return; }else { out.println(""); out.println(""); out.println(""); return; }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/66403.html
摘要:接着来,上一篇搭建了基本的项目骨架,到最后,其实啥也没看见。。。目标全屏显示左侧导航菜单,右侧标签页切换操作内容区域。一般模型与你后台返回的数据结构一一对应。给其他组件提供一致接口使用数据。整个构成一个所谓的。 接着来,上一篇搭建了基本的项目骨架,到最后,其实啥也没看见。。。书接上回,开始写UI效果。 目标 全屏显示、左侧导航菜单,右侧标签页切换操作内容区域。包含header和foo...
摘要:原因分析深入研究当浏览器检测到非用户操作产生的新弹出窗口,则会对其进行阻止。但是,被浏览器拦截我们代码中要弹出的窗口并不是程序员所希望的。 现象 最近在做项目的时候碰到了使用window.open被浏览器拦截的情况,搞得人无比郁闷啊,虽然在自己的环境可以对页面进行放行,但是对用户来说,不能要求用户都来通过拦截。何况当出现拦截时,很多小白根本不知道发生了啥,不知道在哪里看被拦截的页面,简...
摘要:数据读取器相当于原始数据格式与标准数据格式之间的桥梁,它屏蔽了原始数据格式不同对程序开发造成的影响。零是有效的,但空字符串无效。 用了Extjs快一年了,这里整理一下model。 数据模型 showImg(https://segmentfault.com/img/bVzXAR); Extjs 中数据包总共包含了40多个类,其中有三个类比其他类有更重要的地位,它们分别是:model、st...
摘要:在项目中,有一些请求或操作会对数据产生影响比如新增删除更新,针对这类请求一般都需要做一些保护,以防止用户有意或无意的重复发起这样的请求导致的数据错乱。本文总结了一些防止客户端重复发送请求的方法。 在Web项目中,有一些请求或操作会对数据产生影响(比如新增、删除、更新),针对这类请求一般都需要做一些保护,以防止用户有意或无意的重复发起这样的请求导致的数据错乱。 本文总结了一些防止客户端重...
摘要:在项目中,有一些请求或操作会对数据产生影响比如新增删除更新,针对这类请求一般都需要做一些保护,以防止用户有意或无意的重复发起这样的请求导致的数据错乱。本文总结了一些防止客户端重复发送请求的方法。 在Web项目中,有一些请求或操作会对数据产生影响(比如新增、删除、更新),针对这类请求一般都需要做一些保护,以防止用户有意或无意的重复发起这样的请求导致的数据错乱。 本文总结了一些防止客户端重...
阅读 3970·2023-04-26 02:13
阅读 2215·2021-11-08 13:13
阅读 2682·2021-10-11 10:59
阅读 1718·2021-09-03 00:23
阅读 1246·2019-08-30 15:53
阅读 2201·2019-08-28 18:22
阅读 3018·2019-08-26 10:45
阅读 690·2019-08-23 17:58