springmvc攔截器面對ajax時的處理
阿新 • • 發佈:2019-01-01
前面說過,當前臺是ajax傳過來的請求的時候攔截器並不能跳轉,原因可想而知了,因為ajax是區域性的,不管是成功還是失敗都會由ajax的的成功或者失敗函式的進行處理。
沒看過的可檢視另一篇文章http://blog.csdn.net/make__it/article/details/78840576
那我們就需要區分傳過來的請求是否是ajax請求,然後將Url的轉發交給前臺來做
原理:ajax請求會先發送一個請求頭,判斷正確後才傳送真正的請求
程式碼如下
1.後臺程式碼
2.前臺程式碼@Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { // TODO Auto-generated method stub if (req.getHeader("x-requested-with") != null && req.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){ //如果是ajax請求響應頭會有x-requested-with PrintWriter out = resp.getWriter(); out.print("loseSession");//session失效 out.flush(); return false; } //當請求去的是登陸頁面就直接放行 if(arg0.getRequestURI().contains("login")){ return true; } HttpSession session= arg0.getSession(); String username=(String) session.getAttribute("username"); if(username!=null){ return true; } //跳轉到登陸介面進行登陸 arg0.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(arg0, arg1); return false; }
$("test").click(function(){ data = ...; $.ajax({ type: "POST", url: "../query.do", data:data, dataType: "json", success:function(data){ //成功的處理 } error:function(data){ if(data.responseText=='loseSession'){ //在這個地方進行跳轉 } } });