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