在ajax 异步请求下 拦截器过滤器中使用 重定向 页面响应无效

我这里用的是springboot框架,用拦截器实现 对请求的拦截 ,session超时直接跳转到login.html页面。

后台代码:

  1. @Override
  2. public void addInterceptors(InterceptorRegistry registry)
  3. {
  4. //加载自定义拦截器(登录请求和退出请求放行)
  5. registry.addInterceptor(new DemoIntercept()).addPathPatterns("/**").excludePathPatterns("/loginController","/logout");
  6. }
  7. /**
  8. *自定义拦截器
  9. **/
  10. public class DemoIntercept implements HandlerInterceptor
  11. {
  12. private Logger logger = LoggerFactory.getLogger(this.getClass());
  13. @Override
  14. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object arg2, Exception arg3)
  15. throws Exception
  16. {
  17. logger.info("afterCompletion:{}", request.getRequestURI());
  18. }
  19. @Override
  20. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView arg3)
  21. throws Exception
  22. {
  23. logger.info("postHandle:{}", request.getRequestURI());
  24. }
  25. @Override
  26. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception
  27. {
  28. //获取session
  29. HttpSession session = request.getSession();
  30. Object username = session.getAttribute("username");
  31. //用户如果为null 则 重定向到 login页面 ,否则放行
  32. if(null == username)
  33. {
  34. //重定向到login.html
  35. redirect(request, response);
  36. return false;
  37. }
  38. return true;
  39. }
  40. //对于请求是ajax请求重定向问题的处理方法
  41. public void redirect(HttpServletRequest request, HttpServletResponse response) throws IOException{
  42. //获取当前请求的路径
  43. String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+request.getContextPath();
  44. //如果request.getHeader("X-Requested-With") 返回的是"XMLHttpRequest"说明就是ajax请求,需要特殊处理 否则直接重定向就可以了
  45. if("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))){
  46. //告诉ajax我是重定向
  47. response.setHeader("REDIRECT", "REDIRECT");
  48. //告诉ajax我重定向的路径
  49. response.setHeader("CONTENTPATH", basePath+"/login.html");
  50. response.setStatus(HttpServletResponse.SC_FORBIDDEN);
  51. }else{
  52. response.sendRedirect(basePath + "/login.html");
  53. }
  54. }
  55. }

前台代码

  1. //这里给所有ajax请求添加一个complete函数
  2. $.ajaxSetup({
  3. complete : function(xhr, status) {
  4. //拦截器实现超时跳转到登录页面
  5. // 通过xhr取得响应头
  6. var REDIRECT = xhr.getResponseHeader("REDIRECT");
  7. //如果响应头中包含 REDIRECT 则说明是拦截器返回的
  8. if (REDIRECT == "REDIRECT")
  9. {
  10. var win = window;
  11. while (win != win.top)
  12. {
  13. win = win.top;
  14. }
  15. //重新跳转到 login.html
  16. win.location.href = xhr.getResponseHeader("CONTEXTPATH");
  17. }
  18. }
  19. });

这里实现的原理也就是,后台在ajax请求头上打上标记 (REDIRECT ),标记(REDIRECT )这个请求要重定向,而前台接受到响应后 根据标记(REDIRECT )判断这个响应头是否需要 重定向 如果需要则 则获取重定向地址 就可以了

随机推荐

  1. 理解宏的使用 extern

    如何定义一个全局变量在一个文件中,然后在其它文件中调用就行,而不需要多次extern外部声明. 由于之前的公司的程序中全局的变量使用得很多,在多个.C文件中会调用,不这样处理做的话就会多处进行exte ...

  2. 【Educational Codeforces Round 35 C】Two Cakes

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 直觉题. 感觉情况会很少. 毕竟间隔太大了.中间肯定有一些数字达不到. 有1肯定可以 2 2 x肯定可以 3 3 3也可以 2 4 ...

  3. Shiro学习总结(3)——Apache Shiro身份认证

    身份验证,即在应用中谁能证明他就是他本人.一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明. 在shiro中,用户需要提供principals (身份)和cre ...

  4.  洛谷 P3056 [USACO12NOV]笨牛Clumsy Cows

    P3056 [USACO12NOV]笨牛Clumsy Cows 题目描述 Bessie the cow is trying to type a balanced string of parenthes ...

  5. 王小川分享AI

    王小川的分享:Link

  6. Spider_basic

    网络爬虫 定义:网络蜘蛛.网络机器人,抓取网络数据的程序 总结:用Python程序去模仿人去访问网站,模仿的越逼真越好 目的:通过有效的大量数据分析市场走势.公司决策 企业获取数据的方式 公司自有数据 ...

  7. 【“玲珑杯”ACM比赛 Round #20 H】康娜的数学课

    [链接]http://www.ifrog.cc/acm/problem/1161 [题意] 在这里写题意 [题解] 首先x<l肯定无解; 然后,肯定是要选其中的一些数字的. 而且这些数字肯定是大 ...

  8. fatfs输出目录

    利用fatfs文件系统, 如何输出SD卡根目录下的各个文件夹名字呢? 程序如下: u8 Dirname_i; u8 Dirname_j; DIR dir; //读取txt里的目录用,还是要把fatfs ...

  9. Android自己定义View画图实现拖影动画

    前几天在"Android画图之渐隐动画"一文中通过画线实现了渐隐动画,但里面有个问题,画笔较粗(大于1)时线段之间会有裂隙.我又改进了一下.这次效果好多了. 先看效果吧: 然后我们 ...

  10. 参数传递方法(用Delphi的汇编代码解释)

    参数传递方法 李纬的InsideVCL<第一章>中提到Windows定义的回调函数 typedef LRESULT (CALLBACK*WNDPROC)(HWND,UNIT,WPARAM, ...