码迷,mamicode.com
首页 > Web开发 > 详细

Session Timeout 与 $.ajaxSetup

时间:2016-01-22 17:02:23      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:

对于session过期跳转的问题,很简单,就是一个过滤器,然后判断session为空?跳转:继续。但是对于ajax的请求,需要做特殊处理,见下面代码中的

// 此处考虑ajax操作session过期的操作,如果ajax请求过程中session过期,则指定过期状态码为:911.
String requestType = req.getHeader("X-Requested-With");

因为ajax请求的时候请求头是:X-Requested-With,so我们可以根据该请求头做session过期处理。

下面是过滤器的实现,可以作为参考。

 

if (currUser == null) {
  // 用户未登录
  if (isAjaxRequest(req)) {
    handleNoAuthorityResponse(rsp, 401);
  }
  rsp.sendError(401);
  log.info("Unknow session {}. User did not login.", session);
  return;
}

/**
* 判断是否是ajax请求
*
* @param request
* @return
*/
private boolean isAjaxRequest(HttpServletRequest request) {
  String header = request.getHeader("X-Requested-With");
  if (header != null && "XMLHttpRequest".equals(header))
    return true;
  else
    return false;
  }

 

private void handleNoAuthorityResponse( HttpServletResponse rsp, int code ) {
  BaseJson error = new BaseJson();
  switch (code) {
     case 401:
      // 会话失效
      rsp.setHeader("sessionstatus", "timeOut");
      error.setRetcode("E-0099");
      error.setErrorMsg("会话失效,请重新登陆!");
      break;
    case 403:
      rsp.setHeader("sessionstatus", "403");
      error.setRetcode("E-0098");
      error.setErrorMsg("权限不足,请与管理员联系!");
      break;
    default:
      error.setRetcode("E-0098");
      error.setErrorMsg("权限不足,请与管理员联系!");
      break;
  }

  JSONObject jsonObject = JSONObject.fromObject(error);//需要转换为JSON,否则无法返回到前台
  PrintWriter writer = null;
  try {
    writer = rsp.getWriter();
    writer.print(jsonObject);
   } catch (IOException e) {
    e.printStackTrace();
  }
}

 

JS代码:

var sessionTimeCount=0;
$.ajaxSetup({
  error : function(x, status, e) {
      if (x.status == ‘403‘) {
        alert(‘您没有权限执行当前操作!‘);
      } else {
        console.log(‘系统错误,请联系管理员!‘);
      }
    return false;
    },
  complete : function(r, s) {
    var status = r.getResponseHeader(‘sessionstatus‘);
    if (status == ‘timeOut‘) {
      if(sessionTimeCount==0){
        alert(‘会话过期,请重新登录‘);
        top.location.href="${pageContext.request.contextPath}/web/jsp/login.jsp";
       }
        sessionTimeCount++;
      }
    }
  });

Session Timeout 与 $.ajaxSetup

标签:

原文地址:http://www.cnblogs.com/sdream/p/5151303.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!