1. public class LoginInterceptor extends HandlerInterceptorAdapter {
  2.  
  3. @SuppressWarnings("unused")
  4. private static final Logger log = Logger.getLogger(LoginInterceptor.class);
  5.  
  6. @Override
  7. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
  8. throws Exception {
  9. // log.info("URL="+request.getRequestURL().toString());
  10. Object obj = request.getSession().getAttribute(SecurityConstants.LOGIN_USER);
  11. if (null == obj) {
  12. if (WebUtil.isAjaxRequest(request)){
  13. response.setHeader("sessionstatus", "timeout");
  14. }else{
  15. response.sendRedirect(request.getContextPath()+"/usr/login");
  16. }
  17. return false;
  18. }
  19. return super.preHandle(request, response, handler);
  20. }
  21. }

  

  1. public static boolean isAjaxRequest(HttpServletRequest request){
  2. boolean result = false;
  3.  
  4.      String headerX = request.getHeader("X-Requested-With");
  5. return headerX != null && headerX.equalsIgnoreCase("XMLHttpRequest");
  6.  
  7. }

  

  1. /**
  2. * 设置未来(全局)的AJAX请求默认选项
  3. * 主要设置了AJAX请求遇到Session过期的情况
  4. */
  5. $.ajaxSetup({
  6. type: 'POST',
  7. complete: function(xhr,status) {
  8. var sessionStatus = xhr.getResponseHeader('sessionstatus');
  9. if(sessionStatus == 'timeout') {
  10. var top = getTopWinow();
  11. var yes = confirm('由于您长时间没有操作, session已过期, 请重新登录.');
  12. if (yes) {
  13. top.location.href = '/skynk/index.html';
  14. }
  15. }
  16. }
  17. });
  18.  
  19. /**
  20. * 在页面中任何嵌套层次的窗口中获取顶层窗口
  21. * @return 当前页面的顶层窗口对象
  22. */
  23. function getTopWinow(){
  24. var p = window;
  25. while(p != p.parent){
  26. p = p.parent;
  27. }
  28. return p;
  29. }

  

Ajax 请求session过期的统一处理的更多相关文章

  1. 处理jquery的ajax请求session过期跳转到登录页面

    首先需要在拦截器中判断是否是ajax请求,如果是 if(isAjaxRequest(request)){//ajax请求 response.setHeader("sessionstatus& ...

  2. [JS] Ajax请求会话过期处理

    对于页面来说,处理session过期比较简单,一般只需在过滤器里面判断session用户是否存在,不存在则跳转页面到登陆页即可. 对于Ajax请求来说,这个办法则无效,只能获取到登录页的html代码. ...

  3. Ajax请求会话过期处理(JS)

    对于页面来说,处理session过期比较简单,一般只需在过滤器里面判断session用户是否存在,不存在则跳转页面到登陆页即可. 对于Ajax请求来说,这个办法则无效,只能获取到登录页的html代码. ...

  4. js--Ajax的小知识(二):处理ajax的session过期的请求

    问题的产生: 现如今Ajax在Web项目中应用广泛,几乎可以说无处不在. 有时会碰到这样个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax ...

  5. 重写ajax方法实现请求session过期时跳转登录页面

    jQuery(function($){ var _ajax=$.ajax; // 备份jquery的ajax方法 $.ajax=function(opt){ var _success = opt &a ...

  6. ajax前置处理实现异步请求session过期时跳转登录页面

    第一篇博文,mark一下zhq[0]. 问题描述:用户页面,当session过期或都session注销后,普通页面后端都会有过滤器,session过期Redirect到登录页面,但是ajax请求后端只 ...

  7. 重写ajax方法实现异步请求session过期时跳转登录页面(转)

    一般我们会在过滤器里判断登录状态,如果没登录就跳转登录页面,过滤器java核心代码如下: UserItem loginUser = (UserItem)request.getSession().get ...

  8. ajax请求session失效重定向到登录页面

    在ajax请求的页面引入一个自定义的AjaxRedirect.js的文件 AjaxRedirect.js的代码如下: $(function(){ $.ajaxSetup({ type: 'POST', ...

  9. Ajax请求Session超时解决

    web前端js代码: $.ajaxSetup({ contentType : "application/x-www-form-urlencoded;charset=utf-8", ...

随机推荐

  1. 《JavaScript高级程序设计》第6章补充 继承

    基于原型链继承 将父类的实例赋给子类的prototype来实现继承. 原理:父类的实例有父类所有的实例属性和原型方法,将它赋给子类的prototype后,子类的创建的实例就有会__proto__属性指 ...

  2. 浅谈 session 会话的原理

    先谈 cookie 网络传输基于的Http协议,是无状态的协议,即每次连接断开后再去连接,服务器是无法判断此次连接的客户端是谁. 如果每次数据传输都需要进行连接和断开,那造成的开销是很巨大的. 为了解 ...

  3. selenium学习笔记(xpath和css定位)

    简单的介绍下xpath和css的定位 理论知识就不罗列了 还是利用博客园的首页.直接附上代码: 这个是xpath #!/usr/bin/env python # -*- coding: utf_8 - ...

  4. C# WinForm开发系列之c# 通过.net自带的chart控件绘制饼图,柱形图和折线图的基础使用和扩展

    一.需要实现的目标是: 1.将数据绑定到pie的后台数据中,自动生成饼图. 2.生成的饼图有详细文字的说明. 1.设置chart1的属性Legends中默认的Legend1的Enable为false: ...

  5. Tomcat和Servlet

    Tomcat Tomcat是什么,Tomcat是目前市场上主流Web服务器之一,是用Java语言开发的项目.Tomcat支持Servlet和JSP的规范,它由一组嵌套的层次和组件组成.结构如下图 所有 ...

  6. react-hooks: CSSProperties

    1.定义变量 const divStyle: React.CSSProperties = { width: "11rem", height: "7rem", b ...

  7. 【机器学习基石笔记】九、LinearRegression

    [一] 线性回归直觉上的解释 得到Ein = mean(y - wx)^2 [二] w的推导 Ein = 1/N || xw - y||^2 连续.可微.凸函数 在各个方向的偏微分都是0 Ein = ...

  8. ubuntu在anaconda2下安装anaconda3环境 && 在Pycharm中配置Python3

    适合在已经装有anaconda2环境的机器上配置anaconda3环境(或在有anaconda3的环境下再配置2). 1. 下载 anaconda3 下载地址: 推荐清华镜像      https:/ ...

  9. Python虚拟环境设置

    Python2环境 首先,我们用pip安装virtualenv: pip3 install virtualenv 然后,假定我们要开发一个新的项目,需要一套独立的Python运行环境,可以这么做: 第 ...

  10. 部署tinyproxy透明代理服务

    线上需要一个https的透明代理,开始打算用nginx,调试了一段时间发现配置较复杂且没有成功.后来用的tinyproxy做的透明代理.安装配置过程就是下载.解压.编译.安装.配置.启动一波流: 安装 ...