3

我的业务方法中有许多 EJB。这些方法使用@RolesAllowed 注解来检查用户是否可以执行该方法。

所以我有一个调用这些 EJB 方法的 EJB 调度程序。EJB 调度程序使用匿名用户运行,因此授权失败。

我如何以其他角色运行我的调度程序?对于测试建议,我使用 @RunAs("SYSTEM") 注释运行,但我不知道这是否正确。

我的调度程序类

@RunAs("SYSTEM")
public class InboxScheduler {
    protected void inboxFileScan(Timer t) {
        receiptFilesService.receiptFiles();
    }
}

我的 EJB 课程

@RolesAllowed("SYSTEM")
public void receiptFiles() {
    // do anything
}
4

1 回答 1

2

是的,这是一个正确的用途。

EJB 3.2 规范的第 12.3.4.1 节说您的 bean 的所有方法(包括超时回调方法)都将具有在 run-as 中定义的标识。

来自规范: run-as 身份适用于整个企业 bean,即适用于企业 bean 的业务、家庭和组件接口、无接口视图和/或 Web 服务端点的所有方法;消息驱动 bean 的消息侦听器方法;以及企业bean的超时回调方法;以及它们可能依次调用的 bean 的所有内部方法。

于 2011-03-07T02:10:05.343 回答