• Session Timeout 与 $.ajaxSetup


    对于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++;
          }
        }
      });

    www.52newblog.com,本博客专注于励志、人生、名人、故事、时事热点等富有正能量文章的分享。是一款简洁美观、自适应的博客系统。
  • 相关阅读:
    如何实现文字两端对齐?
    三目运算符的复杂运算(条件嵌套判断)
    微信小程序实现图片上传,预览,删除
    微信小程序滚动条返回顶部
    vue+axios下载文件的实现
    java script 运算符
    关于placeholder提示内容出现在textarea底部问题
    js基础知识
    java script 字符串
    java script 函数
  • 原文地址:https://www.cnblogs.com/sdream/p/5151303.html
Copyright © 2020-2023  润新知