1、非ajax的传统型跳转和ajax请求数据跳转

2、使用springMVC拦截器拦截请求,判断session是否过期

3、使用ajaxSetup 全局判断session请求是否过期。

这种方式不是最好的方式,貌似有三种方式处理ajax重定向的问题,修改jquery源码、设置response头、或者每次ajax增加判断。我觉得修改jquery源码不好,每次判断又要改大量的前端代码,累死-_-||!!,所有我觉得最小程度修改前端代码是最好的选择。所以选择了设置response头。

部分拦截器代码:

实现HandlerInterceptor接口,重写prehandle方法

  public boolean preHandle(HttpServletRequest request, HttpServletResponse response,   Object handler) throws SessionTimeoutException, IOException {  String requestUrl = request.getRequestURI();    //获取请求的URLfor(String url : allowUrls) {   //判断请求URL是否属于请求白名单if(requestUrl.endsWith(url)||requestUrl.indexOf(url)>=0) {  return true;  }  }  String session = String.valueOf(WebUtils.getSessionAttribute(request, "userId")); String session1 = String.valueOf(WebUtils.getSessionAttribute(request, "zmccUser")); if("null".equals(session)  || "null".equals(session1)) {   //判断session是否过期,如果是null则session过期  if(request.getHeader("x-requested-with")!=null){  // 非ajax请求比 ajax请求少一个x-requested-with属性,所以有x-requested-with属性则为ajax请求       response.setHeader("sessionstatus", "timeout");  //设置response头,前台依此来判断是否session过期        return false;   }else{      throw new SessionTimeoutException();  //非ajax请求,在我的项目中就是 返回ModelAndView,直接重定向就可以了,抛出SessionTimeoutException自定义异常,注意这是我自己定义的异常   }       } else {  return true;  }  }  

配置springMVC的XML

  <mvc:interceptors>  <mvc:interceptor>  <mvc:mapping path="/**/*.do" />  <bean class="com.uniware.util.SessionTimeoutInterceptor" >  <property name="allowUrls">  <list>   <!-- 这些list是可以访问的白名单,不需要验证session  --><value>/login</value>  <value>LoginController</value></list>  </property>  </bean>  </mvc:interceptor>
</mvc:interceptors>  
<!-- 处理自定义异常,直接跳转,当然你也可以自己实现这个AbstractHandlerExceptionResolver  --><bean id="handlerExceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" >  <property name="exceptionMappings">  <props>  <prop key="com.uniware.util.SessionTimeoutException">redirect:/login.jsp</prop>  </props>  </property>
</bean>  
/** * 设置未来(全局)的AJAX请求默认选项
 * 主要设置了AJAX请求遇到Session过期的情况*/
$.ajaxSetup({type: 'POST',complete: function(xhr,status) {var sessionStatus = xhr.getResponseHeader('sessionstatus');if(sessionStatus == 'timeout') {window.top.location.href = window.top.location;  }}
});

最后你需要把上面的这段jquery代码放到每个请求前,我的项目有一个公共的工具js,我把这段贴在上面就可以了,这样前端我就加了这一项,但是如果你的每个jsp引入的文件都不一样,没有公共的js。那你就把他贴在jquery.js这种代码里好了,当然最好别这样做。

如果上面的代码或者思路有问题,请您指导。谢谢

springMVC session过期跳转到登录界面相关推荐

  1. Shiro session过期跳转到登录页面问题

    Shiro session过期跳转到登录页面问题 shrio的session过期后(工程重启或者用户长时间没进行任何操作),当客户端再次向服务端发起请求时,shrio会判断用户没有登录授权,然后对请求 ...

  2. javaweb关于用户是否登录全局判断,没有登录跳转到登录界面

    javaweb关于用户是否登录全局判断,没有登录跳转到登录界面 有这样一个需求,用户密码登录网站,在session中保留了用户的信息,但是用户很长时间没有再操作该界面,用户的session则被浏览器清 ...

  3. ajax请求 session过期跳转首页的两种处理方式

    在处理session过期跳转首页时遇到了一些困难,经过百度发现了大致两种方法,在这里进行一下整理: 1.直接重写jquery   ajax方法: (function($){ //备份jquery的aj ...

  4. 小米手机连接校园网无法跳转到登录界面

    问题:小米手机 MIUI12 系统,在连接校园网后显示需要登录,但是无法跳转到登录界面.连接其他wifi是没有问题的,但凡是需要登录的wifi就不行,会出现 net:ERR_CONNECTION_RE ...

  5. 【踩坑系列】 SpringBoot ,SpringSecurity,activiti 项目无法正常跳转到登录界面

    [踩坑系列] SpringBoot ,SpringSecurity,activiti 项目无法正常跳转到登录界面 前言 一直强制跳转到springSecurity 的默认的登录界面,无法正常跳转到自己 ...

  6. 【pyqt5学习】——登录界面跳转到主界面,登录界面关闭的情况下从主界面跳转回登录界面

    目录 一.登录界面长下面这样,由qt designer设计 login.py 二.登录界面 逻辑代码loginLogic.py 三.主界面comsumeType.py 四.主界面逻辑代码comsume ...

  7. python爬虫——爬去淘宝商品页面,总是跳转到登录界面

    考虑到cookie的问题 但是在headers={}中添加cookie 的信息,仍然跳转.时而跳转时而不跳转 在成功3次后,再次重定向到登录界面 考虑可能原因:淘宝反爬机制 import reques ...

  8. session过期跳转登录页面

    2019独角兽企业重金招聘Python工程师标准>>> 项目需要做一个自动登出的功能,查询了网上的资料,一开始准备用session监听做,按照下面方式配置监听器 1.在项目的web. ...

  9. react axios和ajax网络请求拦截(session过期跳转登录页)

    网络请求拦截经常也可用到,比如在所有接口消息请求头部加上验证信息token之类的,或者接口报某类错误时统一处理.这里主要用在请求接口时,判断session是否过期,统一返回状态码区分,如果过期了跳转登 ...

最新文章

  1. Android之四大组件(Activity)
  2. 理解ASP.NET MVC Framework Action Filters(翻的)
  3. 大神建议我们经常阅读AI论文,你却不知道去哪找?最全论文给到你!
  4. bzoj4817: [Sdoi2017]树点涂色
  5. C++描述杭电OJ 2009.求数列的和 ||
  6. 计算机的cpu怎么设计出来的,CPU是如何制作出来的?cpu的制造流程介绍
  7. Ubuntu用户连续N次输入错误密码进行登陆时自动锁定X分钟
  8. [转载] python四种列表的插入方法及其效率
  9. android stl,Android NDK中的c++ STL
  10. 2. crontab 的使用
  11. 中心极限定理_达尔文的进化论正确吗?
  12. android 一位小数_android如何保留小数点后x位数字
  13. 2021年最新超火外卖侠cps小程序,三级分销返利外卖领劵小程序源码,带电影票分销积分商城
  14. Windows 7 激活时提示“系统保留分区未分配驱动器号!”解决方法
  15. GRE高频词汇出现频率汇总
  16. ANSYS-SCDM二次开发(遍历获得structure和group下的部件名称)
  17. 安道麦四季度以最佳年度销售额和EBITDA收官全年
  18. ubuntu18.04 编译rtt-lwr
  19. SynthWave '84 - VS Code theme小白安装教程
  20. 如何使用unirest

热门文章

  1. 袋鼠云与阿里云一路同行,共同创造数据价值
  2. Java重载hashcode_HashCode 作用,如何重载hashCode方法
  3. 汽车UDS诊断之诊断设备在线服务(0x3E)深度剖析
  4. 自制一个输入网址就能打开网站的程序
  5. “There is no locally stored library”的问题
  6. Svn 取消revert
  7. 假势腾讯使用宝红码 招行掌上日子新增下载100万
  8. 2.表白被拒绝了怎么办
  9. Oracle Data Guard(DG)11g12C搭建部署
  10. HTML中的图片标签,真的如你认为的那么简单吗?