Java EJB在预处理器中为空

Java EJB在预处理器中为空,java,jakarta-ee,jboss,ejb,interceptor,Java,Jakarta Ee,Jboss,Ejb,Interceptor,我正在JBossAS7.1.1环境中使用RestEasy 出于安全原因,我实现了一个预处理器类。该类使用@Provider和@ServerInterceptor进行注释。 拦截器每次都被调用,这很好 现在,困扰我的是以下几点 我将带有@EJB注释的EJB注入到类中。当调用预侦听器时,表示EJB总是null @Provider @ServerInterceptor public class SecurityInterceptor implements PreProcessInterceptor {

我正在JBossAS7.1.1环境中使用RestEasy

出于安全原因,我实现了一个预处理器类。该类使用@Provider和@ServerInterceptor进行注释。 拦截器每次都被调用,这很好

现在,困扰我的是以下几点

我将带有@EJB注释的EJB注入到类中。当调用预侦听器时,表示EJB总是null

@Provider
@ServerInterceptor
public class SecurityInterceptor implements PreProcessInterceptor
{
    @EJB
    private SomeEjb someEjbServiceFacade;

    ... some funny stuff
}
该EJB如下所示:

@Stateless
public class SomeEjb extends AbstractServiceFacade
{
    ... some important stuff
}
有趣的是,它通过查找工作:

Context ctx = new InitialContext();
SomeEjb asf = ( SomeEjb )ctx.lookup("java:global/mySuperApplication/SomeEjb" );
有人对这种行为有什么解释吗

提前感谢。

尝试向您的
SecurityInterceptor
类添加注释。

什么是注释 拦截器?

拦截器
与JavaEE管理的类结合使用,允许开发人员在
相关目标类
上调用拦截器方法,并与
方法调用或生命周期事件结合使用

下面的类
SomeEjb
也应该可以被
相关的目标类访问,即SecurityInterceptor

@Stateless
public class SomeEjb extends AbstractServiceFacade
{
    ... some important stuff
}
为此,我们需要在
web.xml
中添加
SecurityInterceptor

应该是这样的

<context-param>
      <param-name>resteasy.providers</param-name>
      <param-value>
       ....
       com.myInterceptors.interceptors.security.SecurityInterceptor
      </param-value>
</context-param>

resteasy.providers
....
com.myInterceptors.interceptors.security.SecurityInterceptor

您不能在任意类中注入EJB,只能在指定类型中注入EJB,例如Servlet、筛选器、侦听器、无状态、状态完整、消息驱动bean、单例。如果您想在其他类型的类中使用EJB,那么可以像上面指出的那样使用通过JNDI的访问。

如果您使用的是CDI,那么您也可以使用
@Observer
注释。您是否尝试过
@Inject