处理ajax请求session失效问题

来源:互联网 发布:java断点续传下载校验 编辑:程序博客网 时间:2024/05/16 12:42
  • 使用springMVC拦截器
  • 判断session是否失效
  • 处理ajax请求
  • 重写$.ajaxSetup js
public String intercept(ActionInvocation invocation) throws Exception {     // TODO Auto-generated method stub     ActionContext ac = invocation.getInvocationContext();     HttpServletRequest request = (HttpServletRequest) ac.get(StrutsStatics.HTTP_REQUEST);     String requestType = request.getHeader("X-Requested-With");     System.out.println("+++++++++++++++++++++++reqestType:"+requestType);     HttpServletResponse response = (HttpServletResponse) ac.get(StrutsStatics.HTTP_RESPONSE); //    String basePath = request.getContextPath();     String path = request.getContextPath();      String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;      //获取session     Map session = ac.getSession();     //判断session是否存在及session中的user信息是否存在,如果存在不用拦截     if(session != null && session.get(Constants.FE_SESSION_BG_USER) != null && session.get(Constants.FE_SESSION_BG_AUTH) != null){       System.out.println(invocation.getProxy().getActionName()+"++++++++++++++++++++++++");       System.out.println("namespace:"+invocation.getProxy().getNamespace());       //访问路径       String visitURL = invocation.getProxy().getNamespace() + "/" + invocation.getProxy().getActionName() + Constants.FE_STRUTS_ACTION_EXTENSION;       visitURL = visitURL.substring();       Map<String , Object> authMap = (Map<String, Object>) session.get(Constants.FE_SESSION_BG_AUTH);       Map<Integer, String> actionMap = (Map<Integer, String>) authMap.get(Constants.FE_BG_ACTIONMAP);       if(actionMap != null && !actionMap.isEmpty() && visitURL != null){         if (actionMap.containsValue(visitURL)) {           System.out.println(visitURL+"-----------------------");           return invocation.invoke();         } else{           String forbidden = basePath + Constants.FE_BG_FORBIDDEN;           response.sendRedirect(forbidden);           return null;         }       }       return invocation.invoke();     }else{       if(StringUtils.isNotBlank(requestType) && requestType.equalsIgnoreCase("XMLHttpRequest")){         response.setHeader("sessionstatus", "timeout");          response.sendError(, "session timeout.");          return null;       }else {         String actionName = invocation.getProxy().getActionName();         System.out.println(actionName);         //如果拦截的actionName是loginUI或login,则不做处理,否则重定向到登录页面         if (StringUtils.isNotBlank(actionName) && actionName.equals(Constants.FE_BG_LOGINUI)) {           return invocation.invoke();         }else if(StringUtils.isNotBlank(actionName) && actionName.equals(Constants.FE_BG_LOGIN)){           return invocation.invoke();         }else{           String login = basePath + "/" + Constants.FE_BG_LOGIN_NAMESPACE + "/" + Constants.FE_BG_LOGINUI + Constants.FE_STRUTS_ACTION_EXTENSION; //        System.out.println("+++++++++++++++++++++++++++basePath:"+basePath); //        response.sendRedirect(login);           PrintWriter out = response.getWriter(); //        out.println("<html>");  //        out.println("<script>");  //        out.println("window.open ('"+login+"','_top');");  //        out.println("</script>");  //        out.println("</html>");           out.write("<html><script type='text/javascript'>window.open('"+login+"','_top');</script></html>");           return null;         }       }     }   }

处理ajax请求js

   /**  * 设置未来(全局)的AJAX请求默认选项  * 主要设置了AJAX请求遇到Session过期的情况  */ $.ajaxSetup({   type: 'POST',   complete: function(xhr,status) {     var sessionStatus = xhr.getResponseHeader('sessionstatus');     if(sessionStatus == 'timeout') {       var top = getTopWinow();       var yes = confirm('由于您长时间没有操作, session已过期, 请重新登录.');       if (yes) {         top.location.href = '/skynk/index.html';             }     }   } }); /** * 在页面中任何嵌套层次的窗口中获取顶层窗口 * @return 当前页面的顶层窗口对象 */ function getTopWinow(){   var p = window;   while(p != p.parent){     p = p.parent;   }   return p; }
0 0
原创粉丝点击