在处理session过期跳转首页时遇到了一些困难,经过百度发现了大致两种方法,在这里进行一下整理:
1、直接重写jquery ajax方法:
(function($){
//备份jquery的ajax方法
var _ajax=$.ajax;
//重写jquery的ajax方法
$.ajax=function(opt){
//备份opt中error和success方法
var fn = {
error:function(XMLHttpRequest, textStatus, errorThrown){},
success:function(data, textStatus){
alert(textStatus);
//在这里进行跳转
}
}
if(opt.error){
fn.error=opt.error;
}
if(opt.success){
fn.success=opt.success;
}
//扩展增强处理
var _opt = $.extend(opt,{
error:function(XMLHttpRequest, textStatus, errorThrown){
//错误方法增强处理
fn.error(XMLHttpRequest, textStatus, errorThrown);
},
success:function(data, textStatus){
//成功回调方法增强处理
fn.success(data, textStatus);
}
});
_ajax(_opt);
};
})(jQuery);
这种方法与jquery.min.js库有冲突,使用时一定要注意!
在登录的过滤器或者拦截器中添加一下代码:
if("XMLHttpRequest".equals(((HttpServletRequest) request).getHeader("X-Requested-With"))){
((HttpServletResponse) response).setHeader("sessionstatus", "timeout");
((HttpServletResponse) response).setHeader("redirectUrl", ((HttpServletRequest) request).getContextPath() + "/login.jsp");
} else {
((HttpServletResponse) response).sendRedirect(path2);
}
// 如果session为空表示用户没有登录就重定向到login.jsp页面
return;
//全局的AJAX访问,处理AJAX清求时SESSION超时
if(typeof($)!="undefined"){
$.ajaxSetup({
contentType : "application/x-www-form-urlencoded;charset=utf-8",
complete : function(XMLHttpRequest, textStatus) {
// 通过XMLHttpRequest取得响应头,sessionstatus
var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus");
if (sessionstatus == "timeout") {
// 这里怎么处理在你,这里跳转的登录页面
window.location.replace(XMLHttpRequest.getResponseHeader("redirectUrl"));
}
}
});
}
jquery不推荐使用ajaxSetup容易影响其他插件ajax发生冲突,以上两种方式在使用过程中一定要谨慎!