针对ajax和ServletFiter结合使用时出现拦截请求但页面不跳转的问题解析以及解决方案

针对ajax和ServletFiter结合使用时出现拦截请求但页面不跳转的问题解析以及解决方案
强烈推介IDEA2021.1.3破解激活,IntelliJ IDEA 注册码,2021.1.3IDEA 激活码  

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说针对ajax和ServletFiter结合使用时出现拦截请求但页面不跳转的问题解析以及解决方案,希望能够帮助大家进步!!!

最近在做登录拦截,发现拦截器拦截网页请求后,一部分请求会进行会对修改后response的重定向路径做出反应进行跳转,但是有一部分不会。

仔细区分之后发现,只有‘<a href=>‘的会根据response重定向的路径进行跳转,但是来自ajax以及boostrap-table的ajax请求就不会。

在博主仔细思考之后发现,ajax是存在回调函数接收返回来的response在作出相应处理,和<a>不同,因此对拦截器没有反应。如下图(假设当前情况为未登录,因此拦截器会修改响应头指向C页面也就是登录页面)

  • <a>请求
    在这里插入图片描述
  • ajax请求
    在这里插入图片描述
    由上面两图对比之后,可以看见明显的区别是ajax在调用完Controller之后会执行回调函数也就是所谓的success或者error方法。因此对接收回来的C页面数据不会做出响应。

因此,针对以上思路,博主得到了以下的解决思路,就是当判断当前用户未登录成功的时候,给响应头添加一个参数,返回给ajax,然后ajax每次接收数据时候都判断相应的响应头是否存在该参数,如果存在则跳转。

  • ServletFiter

在这里插入图片描述

ajaxSetup 是jq的方法,可以针对所有的ajax进行配置修改,complete是指在ajax准备执行success方法之前执行的方法。

在这里插入图片描述

这里有一个细坑是,当我们决定给ajax返回对应的响应头让其自行跳转的时候不需要添加重定向,不然会出现如下图的情况

在这里插入图片描述

本文来源GroovRain,由架构君转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处:https://javajgs.com/archives/25348

发表评论