从JBoss AS 7.1.1 Final迁移到JBoss Wildfly 9.0.1的应用程序在启动时出现EJB异常。

4

我正在将一个应用程序迁移到 JBoss Wildfly,但遇到以下错误,经过谷歌搜索后,没有找到类似的错误。

有其他人遇到过这个问题吗?

这个错误的原因和/或解决方案是什么?

我们在 Wildfly 中看到了这个错误。在 AS 中没有看到这个错误。

编辑: 此错误发生在启动时。该方法使用 @Startup 注释进行调用。

12:43:34,442 ERROR [org.jboss.as.ejb3.invocation] (schema_update_thread) WFLYEJB0034: EJB Invocation failed on component DBSchemaUpdateBean for method public void com.mycompany.myappserver.ejb.DBSchemaUpdateBean.processUpdates(com.mycompany.myappserver.config.sql.DBType) throws java.lang.Exception: javax.ejb.EJBAccessException: WFLYEJB0364: Invocation on method: public void com.mycompany.myappserver.ejb.DBSchema
UpdateBean.processUpdates(com.mycompany.myappserver.config.sql.DBType) throws java.lang.Exception of bean: DBSchemaUpdateBean is not allowed
        at org.jboss.as.ejb3.security.AuthorizationInterceptor.processInvocation(AuthorizationInterceptor.java:134)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(SecurityContextInterceptor.java:100)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:66)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:54)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:356)
        at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:634)
        at org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:61)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:356)
        at org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
        at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:195)
        at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:185)
        at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
        at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
        at org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:73)
        at com.mycompany.myappserver.ejb.DBSchemaUpdateBean$$$view31.processUpdates(Unknown Source)
        at com.mycompany.myappserver.ejb.SharedDataBean$1.run(SharedDataBean.java:89)
        at java.lang.Thread.run(Thread.java:744)

你能发布一些你的代码吗?你正在使用JBoss安全域吗?你的Ejbs上有@RolesAllowed这样的注释吗? - Tea Curran
2个回答

5

通过修改独立的xml文件来解决此问题。将以下行进行修改以呈现它所显示的内容。我不确定这代表了多大的安全风险,或者是否有更好的方法来解决这个问题。在我看来,这似乎是关闭身份验证(即未经身份验证的请求将被接受)。

<subsystem xmlns="urn:jboss:domain:ejb3:3.0">
    ...
    <default-missing-method-permissions-deny-access value="false"/>
</subsystem>

2
关键部分如下:

WFLYEJB0364:不允许调用bean:DBSchemaUpdateBean的方法[blah]

JBAS014502似乎也是一个相关的错误(例如这里),但它被提到得更频繁。
看起来,DBSchemaUpdateBean方法processUpdates使用了@RolesAllowed注解,并且被没有被授权角色的客户端调用。如果这发生在启动时,那么这可能是初始化期间的系统调用?我建议检查在初始化期间对该方法的任何调用是否具有正确的角色,并且这些角色已正确配置。

1
是的,这个方法正在使用@Startup注解在启动时被调用(我已经更新了问题以反映这一点——很好的观察力,感谢您的帮助)。我不确定启动用户需要添加到@RolesAllowed中的用户是谁。您提供的链接中的一些信息表明,这可能与standalone.xml配置有关。我的AS实例和Wildfly实例之间的两个文件不同,这很有可能是区别所在。感谢您的帮助! - John
如果有疑问,您总是可以使用@RunAs吗? - hugh
这应该是被接受的答案。在 EJB 上存在 @RolesAllowed,而客户端没有特定角色会导致我的情况下出现此异常。此外,您还提供了一个非常好的链接到另一个问题。 - KnockingHeads

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接