2

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>

谢谢你。

4

1 回答 1

3

I figure out the problem. Actually in the mapping the

'<'principal-name'>' username '< /'principal-name'>'

must be specified with the username associated to the group.

于 2013-09-04T16:28:20.870 回答