访问安全域时出现EJBAccessException

时间:2012-05-28 17:47:39

标签: java security ejb jboss7.x rbac

我正在尝试使用EJB运行一个简单的RBAC示例,但是当客户端从具有SecurityDomain的类调用方法时,我得到:javax.ejb.EJBAccessException:JBAS013323:无效用户。

这是我的设置:

  • 服务器项目
    • EJB 3.1
    • JBoss AS 7.1
    • Picketbox(下载附带的3个jar文件)

客户端是一个简单的java项目

我希望稍后保护的服务器项目中的类如下所示:

@Stateless
public class SomeBean implements SomeRemote, SomeLocal {
  @Override 
  public void unsecuredMethod(Object obj) {     
    //do something
  }
}

在META-INF的jboss-ejb3.xml中我有:

<?xml version="1.0"?>  
<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
              xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:s="urn:security"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd
                 http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
              version="3.1"
              impl-version="2.0">
<assembly-descriptor>
  <s:security>
    <ejb-name>SomeBean</ejb-name>
    <s:security-domain>SomeDomain</s:security-domain>
  </s:security>
</assembly-descriptor>
</jboss:ejb-jar>

我使用此文件是因为我无法导入org.jboss.ejb3.annotation.SecurityDomain注释。 (也许我有错误的依赖?)

在jboss-as-7.1.0.Final \ standalone \ configuration的standalone-full.xml中我有:

...
<subsystem xmlns="urn:jboss:domain:security:1.1">
  <security-domains>
  ...
    <security-domain name="SomeDomain" cache-type="default">
      <authentication>
        <login-module code="Database" flag="required">
          <module-option name="dsJndiName" value="java:/DefaultDS"/>
          <module-option name="principalsQuery" value="SELECT password FROM Customer WHERE username=?"/>
          <module-option name="rolesQuery" value="SELECT rolename, 'Roles' FROM Role WHERE username=?"/>
          <module-option name="unauthenticatedIdentity" value="guest"/>
        </login-module>
      </authentication>
    </security-domain>
  </security-domains>
</subsystem>
...

无论我是否尝试使用

在客户端中进行身份验证,都会发生异常
SecurityClient secClient =     
SecurityClientFactory.getSecurityClient();          
secClient.setSimple("username1", "password1");
secClient.login();
如果我不认证他(或者因为:name =“unauthenticatedIdentity”value =“guest”),或者只是使用客户应该收到的客人角色。另一件事是,即使我提供虚假凭据,也不会抛出来自SecurityClient的LoginException。在此之后,我对SomeBean类进行正常查找并将其转换为SomeRemote。调用unsecuredMethod(..)时会发生异常。我尝试了两者,为guest-user赋予了Role表中的一个角色而没有。

在客户端项目中,除了使用SecurityClient和查找之外,我没有做任何与rbac或ejb相关的事情,我希望这是正确的。

也许有一些很好的教程可以解释一切。我可能遇到问题,因为我的解决方案基于Jboss AS 6教程。

编辑:在互联网上搜索此异常数小时后,我在一本书中发现了一条提示,如果jboss无法找到用于身份验证的数据库表,您将始终收到消息:“无效用户”。所以我的数据源配置可能有问题。

1 个答案:

答案 0 :(得分:2)

如果这是远程访问的EJB,您还需要更新与Remoting连接器关联的安全领域(ApplicationRealm),以使用对安全域的jaas引用,以便可以在入站连接上对用户进行身份验证。 / p>