JBoss 6中@Schedule方法中的EJBAccessException

时间:2014-10-28 13:29:49

标签: java-ee jboss ejb

我们正在使用来自客户端的远程方法EJB填充映射。该应用程序正在使用计时器处理来自此映射的数据。

使用LDAP激活security-domain时,客户端可以使用LDAP身份验证调用远程方法,但是计时器超时会引发javax.ejb.EJBAccessException: Invalid User。注释@javax.ejb.Schedule的方法尝试调用本地EJB方法,并且身份验证失败。

我已经阅读了很多关于此配置的主题:最重要的似乎是Giving security priviliege to a scheduler in Java EE 6,但定时器上的注释@RunAs似乎没有影响。

我尝试了jboss-app / security-domain和@org.jboss.ejb3.annotation.SecurityDomain注释之间的不同组合但没有成功。

是否有人使用带有LDAP身份验证的计时器?

1 个答案:

答案 0 :(得分:0)

使用 @ RunAs / @ RunAsPrincipal 时,当主体未传播时会发生此问题。

要解决此问题,您必须更改$ JBOSS_HOME/server/<instance>/deploy/ejb3-interceptors-aop.xml添加中的配置:

<interceptor-ref name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
StatelessBeanTimeoutMethodStack

中的

ejb3-interceptors-aop.xml(约203行)看起来像:

<stack name="StatelessBeanTimeoutMethodStack">
    <!--  Include the common timeout method stack
        After JBAS-8130, just use this stack-ref and remove the 4 duplicate listed interceptor-refs
        below 
    <stack-ref name="TimeoutMethodStack"/> -->

    <interceptor-ref name="org.jboss.ejb3.interceptor.EJB3TCCLInterceptor"/>
    <interceptor-ref name="org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor"/>
    <interceptor-ref name="CurrentInvocationContextInterceptor"/>
    <interceptor-ref name="org.jboss.ejb3.BlockContainerShutdownInterceptor"/>

    <!--  The additional SLSB specific ones -->
    <interceptor-ref name="org.jboss.ejb3.ENCPropagationInterceptor"/>
    <interceptor-ref name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
    <interceptor-ref name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
    <interceptor-ref name="CMTTx"/>
    <interceptor-ref name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
    <interceptor-ref name="org.jboss.ejb3.tx.BMTTxInterceptorFactory"/>
    <interceptor-ref name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
    <interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
</stack>

MDB发生同样的问题。

Se还:RunAs does not work on EJB timer bean timeout methods