在项目中使用普遍使用了ajax作为请求,如果当登录超时时,需要弹出登录窗口或者跑转到登录页面 重新验证,如果每个方法都判断一遍是个很头疼的事情,为此对ajax 进行了封装。使用方法跟原生ajax一样。
common.js
(function ($) {
//初始化绑定默认的属性
$.ajaxDefaults = $.ajaxDefaults || {};
$.ajaxDefaults.property = {
async:true,
type:"POST",
contentType:"application/x-www-form-urlencoded",
cache:false,
data:{},
dataType:"json",
timeout:6000,
success:function (result, textStatus, request){
},
error:function(result, textStatus, request){
console.log(result);
}
};
//初始化上传控件
$.ajaxRequest = function (b) {
var p = $.extend({}, $.ajaxDefaults.property, b || {});
if(typeof(p.url) == "undefined" || p.url == ""){
$.messager.alert('系统提示', "缺少URL参数");
return ;
}
$.ajax({
async:p.async,
type: p.type,
contentType: p.contentType,
url: p.url,
dataType: p.dataType,
data: p.data,
success: function (result, textStatus, request){
if(request.getResponseHeader('ResponseStatus') == "timeout"){//登录超时
if(window != top){
parent.openLoginDlg();
}else{
openLoginDlg();
}
return ;
}
p.success(result, textStatus, request);
},error:function(data){
p.error(data);
}
});
};
})(jQuery);
后端登录拦载器处理:
public class AuthFilter extends AuthorizationFilter {
protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws IOException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
Subject subject = getSubject(request, response);
if (subject.getPrincipal() == null) {
if (isAjax(httpRequest)) {
httpResponse.setHeader("ResponseStatus", "timeout");
// WebUtils.sendJson(httpResponse, JsonUtils.toJSONString(new ViewResult(false,
// "您尚未登录或登录时间过长,请重新登录!")));
} else {
saveRequestAndRedirectToLogin(request, response);
return false;
}
}
return true;
}
private boolean isAjax(HttpServletRequest httpRequest){
String xmlHttpRequest = httpRequest.getHeader("X-Requested-With");
if (xmlHttpRequest != null && xmlHttpRequest.equalsIgnoreCase("XMLHttpRequest")) {
return true;
}
return false;
}
使用示例:
$.ajaxRequest({
url: postURL,
data: $("#UserForm").serializeArray(),
success: function (result) {
if (result.code == 0) {
$.messager.alert('系统提示', '保存成功', 'info', function () {
window.location.href ="${basePath}/user/userList.html";
});
}else{
$.messager.alert(result.msg);
$("#submitBtn").attr("onclick","saveUser()");
}
},error:function(data){
$("#submitBtn").attr("onclick","saveUser()");
$.messager.alert('系统提示', "操作失败,请稍后再试!");
}
});