即使会话被销毁,也要获取旧会话值

时间:2016-08-25 06:14:38

标签: java jsp spring-mvc servlets

 @Override
   public void sessionDestroyed(HttpSessionEvent arg0)
   {
      boolean isRemoved = sessionIdSet.remove(arg0.getSession().getId());
      if (isRemoved)
      {
          arg0.getSession().invalidate();
          System.out.println(arg0.getSession().getAttribute("userName"));
          System.out.println("session destroyed");
      }
   }

假设登录时 userName 属性 testUser 。所以在我的java控制台超时后,我打印出 null and session destroyed 。因此,如果它为null,则意味着当我在 jsp 中关注时,我应该 null ,但我仍然得到 {{ 1}}

testUser

使用Spring拦截器

 $("body").click(function(event){
            var property="<%=session.getAttribute("userName")%>";
            //Here I expect property to be null as session is destroyed 
                //and it prints null in java so it should also here.
            alert(property);
            //But what i get here is testUser
    }

使用拦截器进行重定向调用public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException { boolean allowRequest = true; String requestUri = request.getRequestURI().toString(); HttpSession session = request.getSession(false); logger.info("Pre-intercepting request URI: " + requestUri); try { if(null != session) { String sessionBelongsTo = (String) session.getAttribute("CUR_TYPE"); String user = (String) session.getAttribute("userName"); System.out.println(user); if(!requestUri.endsWith("/login") && !requestUri.endsWith("/loginauth") && !requestUri.endsWith("sap-ui-core.js") && !requestUri.endsWith("/main")) { if(null == user) { logger.info("" + "Login required, redirecting to LOGIN page"); response.sendRedirect(request.getContextPath() + "/login"); allowRequest = false; } else { logger.info("Login not required"); } } } else{ logger.debug("session is null.redirecting to login"); session = request.getSession(); response.sendRedirect(request.getContextPath() + "/login"); allowRequest = false; } }catch(IOException ioe) { logger.info(ioe.getMessage()); allowRequest = false; } return allowRequest; } 这是成功的,但重定向永远不会发生。

1 个答案:

答案 0 :(得分:0)

您正在混合使用两种不同的代码。您必须意识到,其中执行每个代码时 - 在请求和呈现页面时服务器上的JSP(即之前响应发送到浏览器)和浏览器中的Javascript, 后,浏览器会收到已生成的响应。

即。 <%=session.getAttribute("userName")%>已在服务器上处理,您的浏览器会在var property="johndoe"; - 执行onclick处理程序时,JSP代码 NOT 再次执行。