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

时间:2015-03-26 13:03:25

标签: security java-ee ejb wildfly

当我尝试调用本地EJB时,我得到EJBAccessException在Wildfly 8.2上运行我迁移的Glassfish Web应用程序。我发现JBoss文档除了海峡前进之外都需要帮助,即请不要链接到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>

1 个答案:

答案 0 :(得分:3)

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

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

<?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类似。