攔截器配置:
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object obj) throws Exception {
//擷取判定登陸的session是否存在
String token = (String) request.getSession().getAttribute("token");
String postId = (String) request.getSession().getAttribute("postId");
if(token == null || token == ""){
String XRequested =request.getHeader("X-Requested-With");
if("XMLHttpRequest".equals(XRequested)){
response.getWriter().write("IsAjax");
}else{
response.sendRedirect("/m-web/user/toLogin");
}
return false;
}
if(postId == null || postId == ""){
String XRequested =request.getHeader("X-Requested-With");
if("XMLHttpRequest".equals(XRequested)){
response.getWriter().write("IsAjax");
}else{
response.sendRedirect("/m-web/user/toLogin");
}
return false;
}
return true;
}
1、判斷 String XRequested =request.getHeader("X-Requested-With") 的值,目的是判斷是否是ajax請求。
2、response.getWriter().write("IsAjax");寫出一個響應的資料給ajax,這樣就可以在ajax裡面做判斷
判斷的方式存在兩種方式:
1)直接在ajax裡面做判斷(不建議)
success:function(data){
if(data == "IsAjax"){
window.location.href="m-web/user/toLogin"
return;
}
}
2)改jQuery源碼然後在做壓縮,是針對全局的方式來修改的(建議)
if ( isSuccess ) {// if no content
if ( status === 204 || s.type === "HEAD" ) {
statusText = "nocontent";
// if not modified
} else if ( status === 304 ) {
statusText = "notmodified";
// If we have data, let's convert it
} else {
statusText = response.state;
success = response.data;
error = response.error;
isSuccess = !error;
//解決ajax攔截問題
var result = responses.text;
if(result.indexOf("IsAjax")>=0){
window.location.href="m-web/user/toLogin";
return;
}
}
}