@RunAs和角色传播

时间:2013-09-03 15:00:12

标签: security java-ee glassfish ejb roles

Glassfish的-3.1.2.2。

我的项目中有1个Servlet和2个EJB。

的Servlet --------->初始化--------------->打印

// EJB初始化代码

@Stateless
@RunAs("SYSTEM")
@DeclareRoles({"SYSTEM"})
public class Init {

@Resource
EJBContext ejb;
@EJB
private Print print;

public void initialize() {

System.out.println("**********" + ejb.getCallerPrincipal().getName());
System.out.println("**********" + ejb.isCallerInRole("SYSTEM"));

print.printline();
}
}

// EJB打印代码:

@Stateless
@DeclareRoles({"SYSTEM"})
public class Print {

@Resource
EJBContext ejb;

public void printline() {

System.out.println("**********" + ejb.getCallerPrincipal().getName());
System.out.println("*********" + ejb.isCallerInRole("SYSTEM"));

}
}

//执行结果:

INFO: **********ANONYMOUS (OK)
INFO: **********false (OK)

INFO: **********system (OK)
INFO: **********false (? )

为什么我得到第二个假(我期待是真的)?

Web项目和ejb项目的映射

  <security-role-mapping>
  <role-name>SYSTEM</role-name>
  <group-name>system</group-name>
  </security-role-mapping>

谢谢。

1 个答案:

答案 0 :(得分:3)

我找出问题所在。实际上在映射中

'&LT;' 主要名 '&GT;'用户名'&lt; / '主要名' &GT;”

必须使用与该组关联的用户名指定