我正在尝试从未经身份验证的源(连接到队列的消息驱动 Bean)调用安全 EJB 上的方法。MDB 有一个通过 @EJB 注入的 EJB,这很好,但是目标 EJB 有 @SecurityDomain("stuff") 和 @RequireRole("user"),并且在执行时会生成大量堆栈跟踪:
17:14:03,275 错误 [STDERR] java.lang.NullPointerException 17:14:03,276 org.jboss.ejb3.security.helpers.EJBContextHelper.getCallerPrincipal 的错误 [STDERR](EJBContextHelper.java:99) 17:14:03,276 org.jboss.ejb3.EJBContextImpl.getCallerPrincipal 的错误 [STDERR](EJBContextImpl.java:136)
我试图通过使用@SecurityDomain("stuff") @RunAs("sysuser") 注释的临时 EJB 提供角色来解决此问题,这个临时 bean 将原始目标 EJB 注入其中。我的理解是,目标 EJB 将具有从“sysuser”角色下的临时 bean 调用的方法。然而,我仍然得到相同的堆栈跟踪,导致创建的数据库回滚。
在没有这些堆栈跟踪的情况下,路径 MDB -> SecureEJB 是否可能在其他变体中?代理方法是否走上了成功的正确道路,还是我需要添加一些东西?
干杯,安迪