我的业务方法有很多 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
}
最佳答案
是的,这是正确的用法。
EJB 3.2 规范的第 12.3.4.1 节指出,您的 bean 的所有方法(包括超时回调方法)都将具有在 run-as 中定义的标识。
来自规范: run-as 标识作为一个整体应用于企业 bean,即应用于企业 bean 的业务、主界面和组件接口(interface)的所有方法,不-界面 View 和/或网络服务端点;消息驱动 bean 的消息监听器方法;以及企业 bean 的超时回调方法;以及它们可能依次调用的 bean 的所有内部方法。
关于java-ee-6 - 在我的 EJB 调度程序中使用 @RunAs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4914804/