ajax请求被SpringMVC拦截器拦截后如何进行页面跳转

本文介绍了如何在后端实现一个登录拦截器,针对Ajax请求进行特殊处理。当用户未登录时,如果请求是非Ajax请求,直接转发到登录页面;如果是Ajax请求,则返回特定标志,在前端接收到该标志后利用`window.location.href`进行页面跳转。通过这种方式,实现了对Ajax请求的拦截和页面重定向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

在实现了一个用户登录的拦截器后,判断session中是否存在用户的id,如果没有就跳转到登录界面,如果有就放行,发现这样对ajax请求没有作用,那么如何对ajax请求拦截后进行页面跳转呢?首先判断是否是ajax请求,如果是ajax请求就输出一个标志,然后再success中判断这个标志,然后根据标志在前端利用 window.location.href 进行页面的跳转

具体实现

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    HttpSession session = request.getSession();
    Integer uid = (Integer) session.getAttribute("id");
    String uri = request.getRequestURI();
    if (uri.contains("login") || uri.contains("register")) {
        return true;
    }
    if (uid == null) {
        // 判断是否是ajax请求
        String XRequested =request.getHeader("X-Requested-With");
        if("XMLHttpRequest".equals(XRequested)) {
            response.getWriter().write("FAILURE");
        } else {
            request.setAttribute("msg", "请登录后再操作");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }
        return false;
    }
    return true;
}
$.ajax({
    url : "user/updateHeader",
    type : "POST",
    data : "base64=" + base64,
    async : true,
    success : function (msg) {
        if (msg === "SUCCESS") {
            alert("上传成功");
            window.location.href = "index.jsp";
        } else {
            alert("上传失败,请登录后尝试");
            window.location.href = "login.jsp";
        }
    }
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值