我们定义了拦截器,当session消失,或者我们手动去清除了数据以后,点击ajax请求时,拦截器不转发或者重定向到登录页面,感觉直接失效了一样,方法还是走了的

原因是ajax是异步请求操作,你只要返回给他执行后的操作数据,并不支持重定向或者转发

那我们怎么办呢,看看解决方法,首先在拦截器里加入redirect方法

import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;@Component
public class LoginInterceptor implements HandlerInterceptor {//这个方法是在访问接口之前执行的,我们只需要在这里写验证登陆状态的业务逻辑,就可以在用户调用指定接口之前验证登陆状态了public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {if("GET".equalsIgnoreCase(request.getMethod())){//RequestUtil.saveRequest();//System.out.println("GET方式");}String username = (String) request.getSession().getAttribute("user");if(null == username){//重定向到登录页面redirect(request, response);return false;}else{return true;}}//对于请求是ajax请求重定向问题的处理方法public void redirect(HttpServletRequest request, HttpServletResponse response) throws IOException {//获取当前请求的路径String basePath = request.getScheme() + "://" + request.getServerName() + ":"  + request.getServerPort()+request.getContextPath();//如果request.getHeader("X-Requested-With") 返回的是"XMLHttpRequest"说明就是ajax请求,需要特殊处理 否则直接重定向就可以了if("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))){//告诉ajax我是重定向response.setHeader("REDIRECT", "REDIRECT");//告诉ajax我重定向的路径定义页面response.setHeader("CONTENTPATH",basePath+"/");response.setStatus(HttpServletResponse.SC_FORBIDDEN);}else{response.sendRedirect(basePath+"/");}}public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {}public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {}}

在前端页面也加入方法

$("#queryCH").click(function () {//开始前下调用这个方法就可以ajaxtiao();table.render({elem: '#demo',height: 370,url: '/QueryCF' //数据接口,cols: [[{type: 'checkbox', fixed: 'left'},{field: 'id', title: 'id', sort: true, fixed: 'left',hide:true},{field: 'lsh', title: '流水号'},{field: 'cjcpbh', title: '产品编号',  sort: true},{field: 'twh', title: '图文号',  sort: true},{field: 'cjsj', title: '采集时间', sort: true},{field: 'ytm', title: '二维码内容'},{field: 'count', title: '重复数量'},{field: 'czy', title: '操作员'}]]});});function ajaxtiao() {$.ajaxSetup({complete : function(xhr, status) {//拦截器实现超时跳转到登录页面// 通过xhr取得响应头var REDIRECT = xhr.getResponseHeader("REDIRECT");//如果响应头中包含 REDIRECT 则说明是拦截器返回的if (REDIRECT == "REDIRECT"){var win = window;while (win != win.top){win = win.top;}//重新跳转到 login.htmlwin.location.href = xhr.getResponseHeader("CONTEXTPATH");}}});}

在ajax中拦截器的转发与重定向无效相关推荐

  1. SSM之SpringMVC 04 —— Ajax、拦截器、文件上传和下载

    系列文章 SSM之SpringMVC 01 -- SpringMVC原理及概念.Hello SpringMVC 注解版和配置版 SSM之SpringMVC 02 -- Controller和RestF ...

  2. Day75.Ajax、拦截器Interceptor、异常映射、自动|手动类型转换、类型校验

    目录 一.Ajax ★ 1. 基本类型参数传递  @ResponseBody响应体 2. Ajax传递实体类 3.Ajax传递实体类带级联属性 (非json 普通参数) @DateTimeFormat ...

  3. 关于Spring中拦截器的使用

    关于Spring中拦截器的使用 1 拦截器的概述 1 拦截器说明及应用场景 2 Spring中的拦截器 HandlerInterceptor 3 流程说明 2 简单使用案例 1 准备环境 1 准备文件 ...

  4. 重定向次数过多 java_Java 使用拦截器无限转发/重定向无限循环/重定向次数过多报错(StackOverflowError) 解决方案...

    说明:当使用拦截器出现"请求转发"无限循环或者"重定向"次数过多这种问题的时候,一般都是 拦截器 设置错了 情况一:请求转发时没有配置排除拦截路径,就是说你访问 ...

  5. $httpprovider指令中拦截器interceptors的使用介绍

    2019独角兽企业重金招聘Python工程师标准>>> $http服务允许我们使用http请求和后台做通信,但是在每一次放松请求之前我们都希望能够捕捉这个请求并且进行操作,比如之前富 ...

  6. struts2中拦截器的使用

    拦截器的使用 实现AOP 转自http://www.cnblogs.com/fmricky/archive/2010/05/24/1742514.html 1.什么是拦截器(Interceptor) ...

  7. Java笔记-springframework.ws中拦截器的使用(SOAP)

    这里首先说下客户端拦截器. 这里要实现的效果 这里的打印都是在拦截器中打印的! 下面要介绍如下的东西,如何在拦截器中打印这些东西,其次是在拦截器中添加一个head 对应的Maven <?xml ...

  8. SpringBoot中拦截器

    拦截器在springboot中只需要实现HandlerInterceptor接口,并重写preHandle方法 package com.hzy.config;import org.springfram ...

  9. Spring源码分析之Aop中拦截器,适配器,通知之间的关系

    首先举一个例子: public class MethodBeforeAdviceInterceptor implements MethodInterceptor, Serializable {priv ...

最新文章

  1. numpy.tile 阵列
  2. 4月27日云栖精选夜读丨阿里CMO董本洪:你要运营流量,更要运营超级用户
  3. 生命周期 用户可以操作dom_React 生命周期的打怪升级之路
  4. python通过下载链接下载_Python根据URL地址下载文件——wget
  5. Spring学习笔记002 - AOP
  6. org.mariadb.jdbc.internal.com.send.authentication.SendGssApiAuthPacket could not be instantiated
  7. 无法执行任何java命令,报错OutOfMemoryError: Cannot create GC thread. Out of system resources
  8. android 坚挺通话广播_关于短信黑名单 BroadCast
  9. Centos下docker相关文件迁移发生的问题记录
  10. 【原创】linux使用终端命令执行pyt…
  11. Effient技术原理
  12. [转]华为应对新劳动合同法 万名员工将自选去留[http://news.qq.com/a/20071027/002388.htm  21世纪经济报道]
  13. iOS 获取当前app的名称和版本号
  14. IDEA整合SSM框架之配置日志logback(七)
  15. 王雪松等:驾驶行为与驾驶风险国际研究进展
  16. ACM 各大OJ平台以及题目分类
  17. 利用JavaScript生成动态添加歌单
  18. 华为无线设备WLAN QoS配置命令
  19. FHQ-Treap(非旋treap/平衡树)——从入门到入坟
  20. Raphael属性方法小结一

热门文章

  1. 【毕业设计】36-基于单片机的酒精浓度车载酒精测试仪设计(原理图工程+仿真工程源代码+实物图+答辩论文+答辩PPT)
  2. 单片机物联网升级方案
  3. 图片验证码接口(干货)
  4. IBM实习日记——5.6
  5. 床前明月光,MySQL知多少?举头望明月,删库跑路咯!
  6. 连明工业机器人_十大工业机器人品牌
  7. MQTT | Windows + mosquitto搭建MQTT Broker(本地服务器)与MQTTX客户端联调
  8. QQ互联第三方登陆 redirect uri is illegal(100010)
  9. 电子版权认证证书app上架专用软件著作权认证证书有什么用?准备哪些材料?
  10. 小米6系统 Android版本,追赶华为! 小米开启安卓8.0系统适配, 小米6最先更新!