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>
谢谢你。