1.首先创建一个jquery-x.js文件,将下面代码内容添加进去:
(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) {
}
};
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) {
// 成功回调方法增强处理
if (!data.success && data.isLoginRequired) {
showLoginWindow();
} else {
fn.success(data, textStatus);
}
}
});
_ajax(_opt);
};
})(jQuery);
2.在jsp页面导入该JS文件
<script type="text/javascript" src="<%=basePath%>view/js/jquery-x.js"></script>
3.在web项目中创建类SecurityInterceptor.java:
package com.pam.interceptor;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.pam.entity.Manager;
public class SecurityInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println(""+request.getRequestURI());
// String path = request.getRequestURI();
HttpSession session = request.getSession();
Manager manager = (Manager) session.getAttribute(session.getId());
//如果是ajax请求
boolean isAjax = "XMLHttpRequest".equals(request.getHeader("X-Requested-With"));
if (null == manager || null == session) {
//如果是ajax请求
if (isAjax) {
String jsonObject = "{\"success\":false,\"isLoginRequired\":true}";
String contentType = "application/json";
response.setContentType(contentType);
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.print(jsonObject);
out.flush();
out.close();
return false;
}else{
response.sendRedirect(request.getContextPath()+"/manager/toLogin");
return false;
}
}else{
return true;
}
}
}
4.再在刚刚导入 jquery-x.js文件的jsp中添加
function showLoginWindow() {
alert("网页已过期,请重新登录"); //可根据需要定制
window.location="<%=basePath%>manager/toLogin";
}
这样就算是AJAX请求也会拦截到,然后根据需求做操作。代码质量不好莫怪。