如何在struts2中实现与用户登录绑定的会话?

时间:2013-05-28 05:10:00

标签: session login struts2

我有这个应用程序流与struts2:

  1. Page_A.jsp包含可以使用方法executeA

  2. 向ActionA类提交数据的表单
  3. ActionA-> executeA方法将数据存储在带有“myKey”键的sesion中

  4. ActionA将结果返回到Page_B.jsp

  5. Page_B.jsp包含可以使用方法executeB

  6. 向ActionA类提交数据的表单
  7. 在ActionA-> executeB方法中,它将从“myKey”会话中获取提交的数据

  8. 我发现有两种方法可以设置和从会话中获取数据:

    1. 使用ActionContext

      // put the data into session
      Map session = ActionContext.getContext().getSession();
      session.put("myKey", data);
      
      // get the data from session
      Map session = ActionContext.getContext().getSession();
      data = (String[]) session.get("myKey");
      
    2. 使用ServletActionContext

      // put the data into session
      HttpServletRequest request = ServletActionContext.getRequest();
      HttpSession session = request.getSession(false);
      session.setAttribute("myKey", data);
      
      // get the data from session
      HttpServletRequest request = ServletActionContext.getRequest();
      HttpSession session = request.getSession(false);
      data = (String[]) session.getAttribute("myKey");
      
    3. 在两种方式之间,哪种方式更好?或者还有另一种更好的方法吗? (如果有的话,我更喜欢简单的方法)

      第二件事,我想确保会话与用户登录会话绑定。这意味着一个用户的“myKey”会话数据将与另一个用户的“myKey”会话数据不同(“myKey”会话数据永远不会被另一个用户的“myKey”会话数据覆盖)。

      例如:

      1. User1登录

      2. User1转到Page_A.jsp并提交数据,现在他在Page_B.jsp(现在“myKey”会话包含User1提交的数据)

      3. User2登录

      4. User2转到Page_A.jsp并提交数据

      5. 我担心如果User1确实从Page_B.jsp提交,“myKey”中的数据是否仍然会引用他提交的原始数据,或者他将从User2获取数据(因为“myKey”会话数据被替换了)?

1 个答案:

答案 0 :(得分:2)

如果您正在使用拦截器,请使用ActionContext.getContext().getSession();,因为它没有操作所具有的DI,另一方面,操作添加SessionAware接口,会话将被注入。

注射方法可降低耦合并使您更容易测试您的行为。

以上两者都假设您不需要完整的HttpServletRequest接口(其功能远远超过 作为参数映射):http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html

如果您需要此界面,那么ServletActionContext.getRequest();当然是正确的。再一次在操作中,您可以使用ServletRequestAware来降低耦合,这将为您注入HttpServletRequest

如果您只需要一个属性地图,那么只需使用为您提供地图的方法即可。再次,这是因为它更容易测试,意图很明确。

会话是唯一的,它们由应用程序服务器维护。为简单起见,当用户使用您的应用程序时,您可以放心会话。