最近在做登录拦截,发现拦截器拦截网页请求后,一部分请求会进行会对修改后response的重定向路径做出反应进行跳转,但是有一部分不会。
仔细区分之后发现,只有‘<a href=>‘的会根据response重定向的路径进行跳转,但是来自ajax以及boostrap-table的ajax请求就不会。
在博主仔细思考之后发现,ajax是存在回调函数接收返回来的response在作出相应处理,和<a>不同,因此对拦截器没有反应。如下图(假设当前情况为未登录,因此拦截器会修改响应头指向C页面也就是登录页面)
- <a>请求
- ajax请求
由上面两图对比之后,可以看见明显的区别是ajax在调用完Controller之后会执行回调函数也就是所谓的success或者error方法。因此对接收回来的C页面数据不会做出响应。
因此,针对以上思路,博主得到了以下的解决思路,就是当判断当前用户未登录成功的时候,给响应头添加一个参数,返回给ajax,然后ajax每次接收数据时候都判断相应的响应头是否存在该参数,如果存在则跳转。
- ServletFiter