拦截器拦截的ajax请求无法重定向到登录页面

处理ajax请求重定向需要结合前端代码ajax方法进行处理。

以下以跳转到百度页面为例

后端处理:给请求头塞参数

其中重要的两个参数如下:

  1. 添加重定向标识:“REDIRECT”,告诉ajax我是重定向:response.setHeader("REDIRECT", "REDIRECT");
  2. 添加请求路径:“CONTEXTPATH”,告诉ajax重定向路径:response.setHeader("CONTEXTPATH", "跳转路径");
  3. 将自定义请求头REDIRECT、CONTEXTPATH暴露给外部:response.setHeader("Access-Control-Expose-Headers", "REDIRECT,CONTEXTPATH");

 

后端代码示例如下:

 

//对于请求是ajax请求重定向问题的处理方法
public void redirect(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //获取当前请求的路径
        //logger.error("请求类型:"+request.getHeader("X-Requested-With"));
        response.setHeader("Access-Control-Expose-Headers", "REDIRECT,CONTEXTPATH");
        //告诉ajax我是重定向
        response.setHeader("REDIRECT", "REDIRECT");
        //告诉ajax我重定向的路径
        String url = "https://www.baidu.com/";//重定向路径
        response.setHeader("CONTEXTPATH", url);
        response.getWriter().write(1);
        response.setStatus(HttpServletResponse.SC_FORBIDDEN);

    }
 // 在业务处理器处理请求之前被调用
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception{
        ......校验未登录
        if(未登录){
        redirect(request,response);//调用重定向问题处理方法
        return false;
    }else{
         return true;//请求放行
    }
       
}

前端代码处理:ajax请求,自然是在ajax方法中做处理。后端传了参数的参数就是为了让前端来接收。

前端处理步骤如下:

1.在ajax方法中添加“complete ”,complete 在ajax中无论ajax请求成功或失败都会执行。

2.在complete 中获取响应头中的参数 REDIRECT ,该参数是我们在拦截器拦截成功后塞进去,用来标识该请求是重定向请求的。
3.获取请求路径,并跳转至百度页面

前端代码示例如下:


$.ajax({
				url : "......",
				type : "post",
				data : {
					......
				},
				success : function(text) {
					......
						},
				error : function(e, f, g) {
					......
				},
                complete : function(xhr, status) {
				    alert(status)
                    //拦截器实现超时跳转到登录页面
                    // 通过xhr取得响应头
                    var REDIRECT = xhr.getResponseHeader("REDIRECT");
                    //如果响应头中包含 REDIRECT 则说明是拦截器返回的需要重定向的请求
                    if (REDIRECT == "REDIRECT")
                    {
                        var win = window;
                        while (win != win.top)
                        {
                            win = win.top;
                        }
                       
                        win.location.href = xhr.getResponseHeader("CONTEXTPATH");
                    }
                }
			});

 

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值