session失效,使用ajax请求数据被拦截,此时正常的处理逻辑是跳到登录界面,而不是界面没有变化(java推断是否是ajax请求)

在登录过滤器中。推断请求是ajax请求还是超链接或者地址栏变化的请求

 if (httpServletReq.getHeader("x-requested-with") != null
                            && httpServletReq.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest"))
                    {
                        JSONObject jsessiontimeout = new JSONObject();
                        jsessiontimeout.put("sessiontimeout", true);
                        response.getWriter().print(jsessiontimeout.toString());
                        response.getWriter().flush();
                        response.getWriter().close();
                    }
                    else {
                        goLogin(httpServletReq, httpServletRes);
                    }

js

/*******************************************************************************
 * 推断session是否超时。全部动态请求都须要进行推断
 ******************************************************************************/
function cheackSessionTimeOut(data){
 
 if(isJson(data))
 {
  if(data.sessiontimeout==true){
    //重装浏览器地址栏的地址,跳到登陆页面
   window.location.reload();
  }
 }
};

在全部ajax请求数据成功之后都调用 cheackSessionTimeOut(data);

 $.post(
        url,
        {},
        function(data)
        {   
           cheackSessionTimeOut(data);
        }    
     );  

原文地址:https://www.cnblogs.com/liguangsunls/p/6853211.html