2012-05-28 37 views
1

我试图用EJB运行一个简单的RBAC示例,但是当客户端从具有SecurityDomain的类调用方法时,我得到:javax.ejb.EJBAccessException:JBAS013323:Invalid User 。访问安全域时出现EJBAccessException

这里是我的设置:

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

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

我在服务器项目类,我想以后固定如下所示:

@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注释。 (?也许我有错的依赖)

在独立-full.xml从jboss-as-7.1.0.Final \独立\配置我:如果我试图

... 
<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”值=“客户”)。另一件事是,即使我提供了错误的证书,SecurityClient中的LoginException也不会被抛出。在此之后,我对SomeBean类进行了正常查找并将其转换为SomeRemote。在调用unsecuredMethod(..)时会发生异常。我尝试了两种方式,在角色表中给予来宾用户一个角色而没有。

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

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

编辑:搜索互联网这个例外了几个小时后,我发现了一本书,说,如果JBoss的找不到用于身份验证的数据库表,你总是会得到该消息的提示:“无效的用户”。所以可能我的数据源配置有问题。

回答

2

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

相关问题