通常使用过滤器 或拦截器来进行判断session或cookies里是否失效从而跳转页面,通常普通连接请求实现如下:
[java]
view plain
copy
print
?
- UserInfouser=(UserInfo)request.getSession().getAttribute("user");
- if(user==null){
- response.sendRedirect("/login.html");
- }
UserInfo user = (UserInfo)request.getSession().getAttribute("user");
if(user == null) {
response.sendRedirect("/login.html");
}
对于一个普通的页面没什么问题,但通过ajax请求拦截后却无法实现跳转,扑捉到登录的源代码,在网上查了很多资料 方法也是众说纷纭,有的ajaxSetup设置全局 后台拦截器中通过请求头部信息判断是否ajax请求然后返回参数判断, 有的则是修改jquery ajax源码,太多了 查了资料搞了个最简单的后台不用判断前台 使用一个最方便的做了一次扩展 重写ajax方法实现前置处理,代码如下:
[javascript]
view plain
copy
print
?
- jQuery(function($){
- var_ajax=$.ajax;
- $.ajax=function(opt){
- var_success=opt&&opt.success||function(a,b){};
- var_opt=$.extend(opt,{
- success:function(data,textStatus){
- if(data!='[objectObject]'&&data.indexOf('weidenglu')!=-1){
- window.location.href="gz.html";
- return;
- }
- _success(data,textStatus);
- }
- });
- _ajax(_opt);
- };
- });
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!='[object Object]' && data.indexOf('weidenglu') != -1) {
window.location.href= "gz.html";
return;
}
_success(data,textStatus);
}
});
_ajax(_opt);
};
});
将其代码写到 一个通用的js文件中 页面调用一下即可 ,每个ajax执行之前都会执行它,data!='[object Object]' data.indexOf('weidenglu'), data 返回值如果是 判断里面是否存在weidenglu ,weidenglu在你的login.html页面中写上一个隐藏域即可 因为一旦被拦截未登录返回的就是登录的代码。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|