Ajax 提交session实效跳转到完整的登陆页面

时间:2022-12-22 15:23:07

在spring security 中 Ajax提交时,session超时,局部加载登陆页面,为解决这个问题,重写ajax提交,返回的是modeview或者没有制定datatype时;

如果检测到加载到了login页面,则直接整体跳转到登陆页面,

具体代码如下:

(function($){
// 保存原有的jquery ajax;
var $_ajax = $.ajax;
$.ajax = function(options){
var originalSuccess,
mySuccess,
success_context;
if (options.success && options.dataType!="json") { //如果返回的是json或者map则,下文中的data.indexof函数出错;
// save reference to original success callback
originalSuccess = options.success;
success_context = options.context ? options.context : $;
// 自定义callback
mySuccess = function(data) {
 if(xhr.responseText.indexOf("<body name=\"loginPage\"") >= 0){
                         //如果担心登陆后,跳转到原来的ajax请求页面,原来的父页面没有了,可以在这里设置跳转到一个action,登陆成功后,跳到这个action
                          window.location.href =window.location.href;//baseURL+"/home/index";
                          return;
                        }else{
                         // call original success callback
                         originalSuccess.apply(success_context, arguments);  
                        }   
};
// override success callback with custom implementation
options.success = mySuccess;
}
// call original ajax function with modified arguments
$_ajax.apply($, arguments);
}; })(jQuery);

如果AJAx返回的是json,则Ajax返回数据之前就跳转到了login.jsp页面;返回的是一个jsp页面,转json格式时,直接抛Ajax转换报错解决方法如下:

$(document).ready(function(){
$.ajaxSetup({
error:function(xhr, textStatus, errorThrown){
if((xhr.status == 0 && this.url)||(textStatus=="parsererror")){//返回的是login.jsp页面,所以json解析报错
common.showTip({title: localeMsg.common.error, text: '会话超时请重新登录'});
//如果担心登陆后,跳转到原来的ajax请求页面,原来的父页面没有了,可以在这里设置跳转到一个action,登陆成功后,跳到这个action
window.location.href =baseURL+"/login.jsp";
return;
//common.genSsoIframe(this.url, function(){
//});
}else{
common.showTip({title: localeMsg.common.error, text: xhr.status});
}
}
});
});

如果AJax提交的是json,则可以在拦截器中,判断session实效时,再在ajax中拦截,具体的方法如下:

spring security 3 的Ajax  (解决 Ajax登陆页面跳转)  http://jackyrong.iteye.com/blog/1770629