在 Wildfly 上调用本地 EJB 时出现 EJBAccessException

EJBAccessException when invoke local EJB on Wildfly

当我尝试调用本地 EJB 时,我得到 EJBAccessException 运行我在 Wildfly 8.2 上迁移的 Glassfish Web 应用程序。我找到了 JBoss 文档,而不是 strait forward 并且需要帮助,即请不要 link 到 JBoss 文档。

我的 EJB 上没有 @DeclareRoles 表示法以使其现在变得简单。我尝试使用和不使用安全领域 other 添加 jboss-web 和 jboss-ejb3 以将 bean 绑定到一个领域。但我仍然遇到同样的异常。

我已阅读这些教程,但无法正常使用。我正在使用 MongoDB 和 JDBC 安全领域设置对我帮助不大。但是现在我绕过了用户角色身份验证。

Migrating a Java EE App from GlassFish to WildFly

Invoke EJB from WildFly safely 还有其他人

如何在我的 Web 应用程序中 运行 Wildfly 上的本地 EJB?

@Stateless
public class MyBean {

    public String sayHello() {
    ...

jboss-web.xml

<jboss-web>
     <security-domain>other</security-domain>
</jboss-web>

jboss-ejb3.xml

<assembly-descriptor>
    <s:security>
        <!-- Even wildcard * is supported -->
        <ejb-name>*</ejb-name>
        <!-- Name of the security domain which is configured in the EJB3 subsystem -->
        <s:security-domain>other</s:security-domain>
    </s:security>
    </assembly-descriptor>

在 WildFly 8 中,在安全 bean 中没有明确安全配置的此类方法将被视为类似于具有 @DenyAll 配置的方法。

可以通过 jboss-ejb3.xml 部署描述符在每个 bean 级别或每个部署级别控制此行为,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<jboss:jboss
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:s="urn:security:1.1"
        version="3.1" impl-version="2.0">

    <assembly-descriptor>
        <s:security>
            <!-- Even wildcard * is supported where * is equivalent to all EJBs in the deployment -->
            <ejb-name>FooBean</ejb-name>
            <s:missing-method-permissions-deny-access>false</s:missing-method-permissions-deny-access>
        </s:security>
    </assembly-descriptor>
</jboss:jboss>

missing-method-permissions-deny-access 设置为 false 允许所有用户访问此类方法,即行为将切换为类似于 @PermitAll