springmvc拦截器面对ajax时的处理

来源:互联网 发布:star打印机打印端口 编辑:程序博客网 时间:2024/06/03 23:40

前面说过,当前台是ajax传过来的请求的时候拦截器并不能跳转,原因可想而知了,因为ajax是局部的,不管是成功还是失败都会由ajax的的成功或者失败函数的进行处理。

没看过的可查看另一篇文章http://blog.csdn.net/make__it/article/details/78840576

那我们就需要区分传过来的请求是否是ajax请求,然后将Url的转发交给前台来做

原理:ajax请求会先发送一个请求头,判断正确后才发送真正的请求

代码如下

1.后台代码

@Overridepublic boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {// TODO Auto-generated method stubif (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'){                    //在这个地方进行跳转                 }            }        });


原创粉丝点击