zoukankan      html  css  js  c++  java
  • 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,本博客专注于励志、人生、名人、故事、时事热点等富有正能量文章的分享。是一款简洁美观、自适应的博客系统。
  • 相关阅读:
    html框架
    head标签
    项目报错,tomcat中引起
    Eclipse中点击小猫提示Tomcat settings should be set in Tomcat Preference Page
    同一台电脑上安装两个tomcat服务器
    Java排序算法
    格式化系统日期
    九九乘法表
    Java实现给定字符串的倒序输出
    Eclipse警告:The serializable class XXX does not declare a static final serialVersionUID field of type long
  • 原文地址:https://www.cnblogs.com/sdream/p/5151303.html
Copyright © 2011-2022 走看看