重写ajax方法实现异步请求session过期时跳转登录页面
2016-01-11 21:03
791 查看
一般我们会在过滤器里推断登录状态,假设没登录就跳转登录页面。过滤器java核心代码例如以下:
由于页面根本没跳转。仅仅是捕获到了登录页面的源代码而已。
网上一堆庸人给出一堆扯蛋的方法,主要有。
1.返回的字符串附加登录状态;(那么多,你愿意改么。并且前后端都得改。编码的时候还要总去考虑那个状态烦不烦)
2.改动http头信息;(装B深沉型)
3.改动jquery源文件推断。(勉强算个程序猿,可是尽力不去动源,性能问题你还得解压再压缩,别人也不一定知道你改过源代码)
我的解决方式跟第三种方法思路接近。重写ajax方法实现前置处理,代码例如以下:
在登录页面的源代码里面,你随便找个地方打个标记然后隐藏掉,比方我的标记就是weinianjie。
对于$.get和$.post就不用说了吧,这两个方法都是调用了$.ajax方法的。所以也就自己主动获取了前置推断能力。
大功告成。注意以上扩展须要放在你的全部ajax请求之前运行。
UserItem loginUser = (UserItem)request.getSession().getAttribute("loginUser"); if(loginUser == null) { response.sendRedirect("/login.action"); }这个对于普通页面来说全然没问题,可是在使用ajax的时候往往得不到想要的效果。
由于页面根本没跳转。仅仅是捕获到了登录页面的源代码而已。
网上一堆庸人给出一堆扯蛋的方法,主要有。
1.返回的字符串附加登录状态;(那么多,你愿意改么。并且前后端都得改。编码的时候还要总去考虑那个状态烦不烦)
2.改动http头信息;(装B深沉型)
3.改动jquery源文件推断。(勉强算个程序猿,可是尽力不去动源,性能问题你还得解压再压缩,别人也不一定知道你改过源代码)
我的解决方式跟第三种方法思路接近。重写ajax方法实现前置处理,代码例如以下:
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.indexOf('weinianjie') != -1) { window.location.href= Globals.ctx + "/login.action"; return; } _success(data, textStatus); } }); _ajax(_opt); }; });
在登录页面的源代码里面,你随便找个地方打个标记然后隐藏掉,比方我的标记就是weinianjie。
对于$.get和$.post就不用说了吧,这两个方法都是调用了$.ajax方法的。所以也就自己主动获取了前置推断能力。
大功告成。注意以上扩展须要放在你的全部ajax请求之前运行。
相关文章推荐
- DotSpatial 创建面状要素——含空洞
- oracle跨用户数据导入案例
- SSL建立连接4
- LeetCode__169. Majority Element
- 蓝桥杯 ALGO-92 前缀表达式
- 递归算法的时间复杂度终结篇
- xcode simulator不显示具体版本/解决xcode多个模拟器的办法
- 【JDK源码分析】String的存储区与不可变性(转)
- Android 进行单元測试难在哪-part3
- cdh完美集成kafka
- android ui
- Tengine笔记1:安装Tengine和Tengine说明
- 一个简单的爬虫(1)
- android adapter getChildAt(int)方法使用
- 聚合函数与分组
- 批处理命令--管道&条件判断
- 004_在Eclipse环境下搭建Android开发平台(离线搭建)
- Fragment使用小结
- Firemonkey使用iOS的第三方静态库(Link Binary With Libraries)
- Java IO的RandomAccessFile的使用(转)