EJB 之间的信任

Trust between EJBs

我有一堆使用声明式安全性的 EJB,我需要让一个 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",他没有调用giveMeInfo()所需的"role2",但我想让他调用这个方法无论如何,因为它来自 ServiceOne(这是允许的)。

如果我使用基于@RunAs 的策略,我会丢失有关真实用户的信息,因为 getCallerPrincipal() 只会给我指定匿名主体的角色,但我需要保留原始调用者信息。

(ps: 我正在使用 JBOSS eap 6。)

提前致谢。

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

class ServiceTwo {

    @Resource
    private SessionContext ejbCtx;

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