1

EJB で単純な RBAC の例を実行しようとしていますが、クライアントが SecurityDomain を持つクラスからメソッドを呼び出すと、次のようになります: javax.ejb.EJBAccessException: JBAS013323: Invalid User.

これが私のセットアップです:

  • サーバー プロジェクト
    • 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(..) を呼び出すと、例外が発生します。私は両方で試してみました.Roleテーブルでゲストユーザーにロールを与えて、与えずに.

クライアント プロジェクト内では、SecurityClient とルックアップを使用する以外は、rbac または ejb に関連することは何もしませんでした。これが正しいことを願っています。

すべてを説明する優れたチュートリアルがあるかもしれません。私のソリューションは Jboss AS 6 チュートリアルに基づいているため、問題が発生する可能性があります。

編集:インターネットでこの例外を何時間も検索した後、jboss が認証に使用されるデータベーステーブルを見つけられない場合、常に「無効なユーザー」というメッセージが表示されるというヒントを本の中に見つけました。したがって、おそらくデータ ソースの構成に問題があります。

4

1 に答える 1

2

これがリモートでアクセスされる EJB である場合は、リモーティング コネクタに関連付けられているセキュリティ レルム (ApplicationRealm) を更新して、セキュリティ ドメインへの jaas 参照を使用し、インバウンド接続でユーザーを認証できるようにする必要もあります。

于 2012-05-29T10:39:31.107 に答える