1. 程式人生 > >springmvc攔截器面對ajax時的處理

springmvc攔截器面對ajax時的處理

前面說過,當前臺是ajax傳過來的請求的時候攔截器並不能跳轉,原因可想而知了,因為ajax是區域性的,不管是成功還是失敗都會由ajax的的成功或者失敗函式的進行處理。

沒看過的可檢視另一篇文章http://blog.csdn.net/make__it/article/details/78840576

那我們就需要區分傳過來的請求是否是ajax請求,然後將Url的轉發交給前臺來做

原理:ajax請求會先發送一個請求頭,判斷正確後才傳送真正的請求

程式碼如下

1.後臺程式碼

@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;
		
		
	}
2.前臺程式碼
$("test").click(function(){
        data = ...;
        $.ajax({
            type: "POST",
            url: "../query.do",
            data:data,
            dataType: "json",
            success:function(data){
                //成功的處理
            }
            error:function(data){   
                if(data.responseText=='loseSession'){
                    //在這個地方進行跳轉 
                }
            }
        });