当过滤器遇到ajax调用时无法正常返回情况,需要在过滤器中对ajax调用进行处理,示例如下:
//判断是否是ajax请求
private static boolean ajaxDofilterSessionNull(HttpServletRequest request,HttpServletResponse response){
boolean isAjax = false;
if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equals("XMLHttpRequest")) {
// ajax请求
response.setHeader("sessionstatus", "timeout");
isAjax = true;
}
return isAjax;
}
若是返回true则不能用response.sendRedirect(“”)来跳转,此时需要一个ajax全局方法jQuery.ajaxSetup,如下:
//全局的ajax访问,处理ajax清求时sesion超时
jQuery.ajaxSetup({
contentType : "application/x-www-form-urlencoded;charset=utf-8",
complete : function(XMLHttpRequest, textStatus) {
var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus"); // 通过XMLHttpRequest取得响应头,sessionstatus,
if (sessionstatus == "timeout") {
// 如果超时就处理 ,指定要跳转的页面
window.location.replace("/login.htm");
}
}
});
这样在ajax请求时就可以顺利跳转到需要的链接。此全局方法可以放在任何页面,所有ajax请求处理结果前都会调用此全局方法。