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>
谢谢。
答案 0 :(得分:3)
我找出问题所在。实际上在映射中
'&LT;' 主要名 '&GT;'用户名'&lt; / '主要名' &GT;”
必须使用与该组关联的用户名指定。