CDI 事件和 EJB 观察者的安全上下文

Security context for CDI Events & EJB Observers

我在 Wildfly 10 (CDI 1.2) 中有一个 JEE7 应用程序 运行。我想使用无状态 EJB 添加带有 @Asynchronous 观察器的 CDI 事件。

@Stateless
public class SBean {
    // get a static slf4j logger for the class
    protected static final Logger logger = getLogger(SBean.class);

    /**
     * Listen for an incoming event. 
     * @param metadata
     */
    @Asynchronous
    public void observeCommits(@Observes ObjectMetadata metadata){
        // determine which kind of object needs to be retrieve
        logger.info( "Saw a {} with id {}", metadata.getClazz().getName(), metadata.getId());
    }

}

EJB Observer 触发时将设置什么 SecurityContext?我试图在 Weld 文档中查找文档,但这似乎不是正确的位置,因为它只讨论 @Observer 但不讨论异步 EJB。

当观察者捕捉到事件时,是否会出现与事件触发时相同的安全上下文?是否有任何描述此规范的文档?

在这种情况下,管理行为的规范如下:

  1. CDI 1.2
  2. EJB 3.2

从CDI的角度来看,事件观察者的调用与直接调用相应参数的方法是一样的。从 EJB 的角度来看,EJB bean 可由 CDI 注入,EJB 规范规定了所有其他行为。

EJB 3.2 规范直接回答了问题:

4.5.4 Security

The caller security principal propagates with an asynchronous method invocation. Caller security principal propagation behaves exactly the same for asynchronous method invocations as it does for synchronous session bean invocations.