springmvc Interceptor 拦截 ajax 请求 成功后,返回至页面

注:Interceptor 的作用之一可以是拦截请求,判断请求是否正常

 

问题:当 Interceptor 拦截ajax请求 后,返回false  但是ajax需要的是返回的数据,所以此时拦截器会返回一个false,但是这并不是ajax请求想要的数据,所以没有执行相应的处理。

 

解决方法:在 Interceptor 拦截后返回指定的重定向请求头信息

并且在ajax中,设置complete函数,让请求完成后,自动执行该函数,判定是否存在请求头信息

如果存在,那么重定向到别的页面

 

springmvc interceptor配置

    <!--拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/db/*"/>   <!--被拦截的请求-->
            <mvc:exclude-mapping path="/user/equale"/>  <!--不被拦截的请求-->
         
            <bean class="com.nextStep.interceptors.ExecuteIntercept"/>   <!-- 拦截器处理-->
        </mvc:interceptor>
    </mvc:interceptors>

 

代码


//用户操作拦截
public class ExecuteIntercept implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // if(request.getSession().getAttribute("LOG_IN_FLAG")==null){
      
        // 是ajax请求
        if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
            //告诉ajax我是重定向
            response.setHeader("REDIRECT", "REDIRECT");
            //告诉ajax我重定向的路径
            response.setHeader("CONTENTPATH", "error.jsp");
            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
            return false;
        } else {
            // 不是ajax请求
            response.setContentType("text/html; charset=UTF-8");
            response.getWriter().print("<html><body><script type='text/javascript'>alert('您的访问过于频繁,已被锁定,请等待解锁!');</script></body></html>");
            response.getWriter().close();
            response.flushBuffer();
        }
        return true;
    }
}

<script type="text/javascript">
        document.getElementById("submit").onclick=function(){
        document.getElementById("msg").innerHTML="";

        var name = document.getElementById("name").value;
        var password = document.getElementById("password").value;
        if(name==""){
            alert("请输入用户名。");
            return ;
        }
        if(password==""){
            alert("请输入密码。");
            return ;
        }

        document.getElementById("submitDisImg").src="img/wait.gif";
        $.ajax({
            url:"user/equale",     //请求地址
            contentType:"application/json;charset=UTF-8",  //传输数据类型
            data:JSON.stringify({name:name,password: password}),  //要传输的数据
            dataType:"json",   //返回值类型
            type:"post",     //请求方式
            success:function(msg){  //data表示服务端响应的数据
                if (msg=="success") {//根据返回值进行跳转
                    window.location.href = 'index.jsp';
                }else{
                    document.getElementById("submitDisImg").src="";
                    document.getElementById("msg").innerHTML="用户名或密码错";
                }
            },
            complete : function(xhr, status) {
                //拦截器实现超时跳转到登录页面
                // 通过xhr取得响应头
                var REDIRECT = xhr.getResponseHeader("REDIRECT");
                //如果响应头中包含 REDIRECT 则说明是拦截器返回的
                if (REDIRECT == "REDIRECT"){

                    //重新跳转到 login.html
                    window.location.href = xhr.getResponseHeader("CONTENTPATH");
                //window.location.href = "error.jsp";
                }
            }

        });
    }

</script>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值