spring mvc 過濾器關於AJAX的過濾驗證

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請求也會攔截到,然後根據需求做操作。代碼質量不好莫怪。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章