SpringMvc拦截器 有响应 页面不跳转

一、问题

我的请求时ajax请求,所以跳转不成功

二、解决办法

后端拦截器通过判断请求头的类型来曲别是什么类型的请求

public class LoginIterceptor implements HandlerInterceptor {
    //进入controller 方法前
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");
        if (user == null) {
            // 获取到项目名,以便下面进行重定向
            String homeUrl = request.getContextPath();
            // 如果是 ajax 请求,则设置 session 状态 、CONTEXTPATH 的路径值
            // 如果是ajax请求响应头会有,x-requested-with
            if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {
                response.setHeader("SESSIONSTATUS", "TIMEOUT");
                response.setHeader("CONTEXTPATH", homeUrl + "/login.jsp");
                // FORBIDDEN,forbidden。也就是禁止、403
                response.setStatus(HttpServletResponse.SC_FORBIDDEN);
            } else {
                // 如果不是 ajax 请求,则直接跳转即可
                response.sendRedirect(homeUrl + "/login.jsp");
            }
            return false;
        }
        return true;
    }
}

前端:ajax加上拦截器跳转的方法

//分页查询请求
		function to_page(currentPage,pageSize) {
			$.ajax({
				url:"/user/list",
				data:{'currentPage':currentPage,'pageSize':pageSize},
				type:"post",
				async: true,
				dataType:'json',
				success:function(ref){
					if (ref.flag){
						//1.解析数据到table
						page_list(ref);
						//解析显示分页信息
						page_info(ref);
						//3.解析并显示分页信息
						page_nav(ref);
					}
				},
				complete :
						function(XMLHttpRequest, textStatus) {
							// 通过XMLHttpRequest取得响应头,sessionstatus
							var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus");
							if (sessionstatus == "TIMEOUT") {
								var win = window;
								while (win != win.top){
									win = win.top;
								}
								win.location.href= XMLHttpRequest.getResponseHeader("CONTEXTPATH");
							}
						}
			});
		}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐睡睡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值