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

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

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

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

  • 请求
    针对ajax和ServletFiter结合使用时出现拦截请求但页面不跳转的问题解析以及解决方案_第1张图片
  • ajax请求
    针对ajax和ServletFiter结合使用时出现拦截请求但页面不跳转的问题解析以及解决方案_第2张图片
    由上面两图对比之后,可以看见明显的区别是ajax在调用完Controller之后会执行回调函数也就是所谓的success或者error方法。因此对接收回来的C页面数据不会做出响应。

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

  • ServletFiter

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

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

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

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

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

你可能感兴趣的:(Servlet,javaweb,前端)