0

我正在使用 Struts2 框架并在 POJO 类中有以下方法。

public String execute() {
    setUserPrincipal();
    //do something
    someMethod(getUserPrincipal().getLoggedInUserId());
    return SUCCESS;
}

setUserPrincipal()方法看起来像这样

public void setUserPrincipal() {
    this.principal = (UserPrincipal) getServletRequest().getSession().getAttribute("principal");
}

基本上,它只是获取一个名为“principal”的会话属性并设置它,以便我可以找出登录用户是谁。执行此操作的调用setUserPrincipal()在我的大多数 POJO 中很常见,并且在测试方法时也很麻烦,因为我必须设置会话属性。

有没有办法使用 Spring 或其他方法将会话属性自动注入 POJO?

4

2 回答 2

2

我只使用了一点 Struts2,但它们有一个拦截器堆栈,您可以将其绑定到特定操作。您可以创建自己的拦截器来注入会话变量。

public interface UserAware 
{
   void setUserPrincipal(String principal);
}

// Make your actions implement UserAware

public class MyInterceptor implements Interceptor
{
   public String intercept(ActionInvocation inv) throws Exception
   {
      UserAware action = (UserAware) inv.getAction();
      String principal = inv.getInvocationContext().getSession().get("principal");
      action.setUserPrincipal(principal);

      return inv.invoke();
   }
}

就像我说的,没有太多的 Struts2 经验,所以这是未经测试的,但我认为这个想法是存在的。

于 2012-05-31T18:09:27.407 回答
0

不知道注入会话,但可能有一段 AOP 代码在执行之前设置主体。

这是一些文档:

http://static.springsource.org/spring/docs/2.5.x/reference/aop.html

于 2012-05-31T18:00:38.370 回答