EJB之间的信任

时间:2016-01-25 18:36:32

标签: java-ee ejb ejb-3.1 jboss6.x jaas

我有一堆使用声明性安全性的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。)

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以在@RolesAllowed中声明多个角色:

class ServiceTwo {

    @Resource
    private SessionContext ejbCtx;

    @RolesAllowed({"role1", "role2"})
    public String giveMeInfo() {
        System.out.println("OK user " + ctx.getCallerPrincipal());
        return str;
    }
}