我有一堆使用声明性安全性的EJB,我需要让EJB信任另一个。
例如
class ServiceOne {
@EJB
private ServiceTwo service;
@RolesAllowed("role1")
public void doSomething() {
// do several things here...
service.giveMeInfo();
}
}
class ServiceTwo {
@Resource
private SessionContext ejbCtx;
@RolesAllowed("role2")
public String giveMeInfo() {
System.out.println("OK user " + ctx.getCallerPrincipal());
return str;
}
}
用户调用serviceOne.doSomething()只有“role1”,他没有“role2”,这需要调用giveMeInfo(),但我想让他无论如何都要调用这个方法,因为它来自ServiceOne(允许)。
如果我使用基于@RunAs的策略,我会丢失有关真实用户的信息,因为getCallerPrincipal()只给我一个用匿名主体指定的角色,但我需要保留原始的来电者信息。
(ps:我正在使用JBOSS eap 6。)
提前致谢。
答案 0 :(得分:0)
您可以在@RolesAllowed中声明多个角色:
class ServiceTwo {
@Resource
private SessionContext ejbCtx;
@RolesAllowed({"role1", "role2"})
public String giveMeInfo() {
System.out.println("OK user " + ctx.getCallerPrincipal());
return str;
}
}