ACL  目次

Oracle Service RegistryのACLデモでは、Oracle Service RegistryのACL Application Programming Interface(API)の機能およびこのAPIの使用方法が示されます。

ACL拡張機能は、選択したユーザーまたはグループに対して権限を付与するか、権限を取り消すために使用します。ACLを作成、保存、削除、取得および検索する方法を学習します。

Oracle Service RegistryのSecurityのACLデモ・セットには、Oracle Service RegistryのクライアントAPIの学習を支援する次のデモが含まれています。

Create  Create ACLを使用して、1人のユーザーに対し、別のユーザーのビジネス・エンティティにサービスを作成する権限を付与する方法のデモンストレーションです。

Save  Save ACLを使用して、1人のユーザーに対し、別のユーザーのビジネス・エンティティを更新する権限を付与する方法のデモンストレーションです。

Delete  Delete ACLを使用して、1人のユーザーに対し、別のユーザーのビジネス・エンティティを削除する権限を付与する方法のデモンストレーションです。

Get  Get ACLを使用して、選択したユーザーから、ビジネス・エンティティのビジネスの詳細を取得する権限を取り消す方法のデモンストレーションです。

Find  Find ACLを使用して、選択したユーザーからfind_business操作内のビジネス・エンティティを非表示にする方法のデモンストレーションです。

前提条件および準備手順: コード  目次

Oracle Service Registryがすでにインストールされ、環境変数REGISTRY_HOMEにレジストリのインストール場所が設定されていることを想定しています。

Oracle Service Registryのデモを実行するには、レジストリが実行中である必要があります。

デモを構成する必要があります。構成システムには、グローバルとローカルの2つのレベルがあります。グローバル・レベルで定義されたプロパティは、ローカル・レベルで上書きできます。グローバル・プロパティは、次のファイルにあります。

Windows: %REGISTRY_HOME%¥demos¥env.properties
UNIX: $REGISTRY_HOME/demos/env.properties

Oracle Service Registryのインストール中に設定された値はそのまま使用でき、値の変更はすべてのデモに影響を与えます。単一のデモについて(つまりローカル・レベルで)プロパティの値を再定義する必要がある場合は、env.propertiesを編集してください。このファイルは、ファイルrun.shrun.bat)と同じディレクトリにあります。ACLデモのローカル・レベルのプロパティは、次のファイルからロードされます。

Windows: %REGISTRY_HOME%¥demos¥security¥acl¥env.properties
UNIX: $REGISTRY_HOME/demos/security/acl/env.properties

表15 デモで使用されるプロパティ

名前デフォルト値説明
uddi.demos.user.john.namedemo_john1人目のユーザーの名前
uddi.demos.user.john.passworddemo_john1人目のユーザーのパスワード
uddi.demos.user.jane.namedemo_jane2人目のユーザーの名前
uddi.demos.user.jane.passworddemo_jane2人目のユーザーのパスワード
uddi.demos.url.publishinghttp://localhost:8888/registry/uddi/publishing公開Webサービス・ポートのURL
uddi.demos.url.securityhttp://localhost:8888/registry/uddi/securityセキュリティWebサービス・ポートのURL

プレゼンテーションおよび機能プレゼンテーション  目次

この項では、すべてのデモで使用されるプログラミング・パターンを、Findデモを例にして説明します。このデモのソース・コードは次のファイルにあります。

Windows: %REGISTRY_HOME%¥demos¥security¥acl¥src¥demo¥uddi¥acl¥Find.java
UNIX: $REGISTRY_HOME/demos/security/acl/src/demo/uddi/acl/Find.java

mainメソッドは、複数のロジックの部分に分けられます。最初の部分は、ユーザーのデモを構成するために使用します。Goodユーザーとは許可のACLを受け取るユーザーを表し、Badユーザーとは禁止のACLを受け取るユーザーを表します。

2つ目の部分では、情報が追加されたsave_business操作が実行されます。ACLはcategoryBagに設定されています。次のセクションでは、Badユーザーが名前でビジネス・エンティティを検索しようとして失敗し、最終的にはGoodユーザーがビジネス・エンティティを見つけます。

String name = UserInput.readString("Enter business name", "ACL find demo");
String description = UserInput.readString("Enter description",
                                                "Demonstration of find-allowed, find-denied ACLs");
String searchName = UserInput.readString("Enter search string", "ACL%");
String owner = UserInput.readString("Enter entity owner", "admin");
String password = UserInput.readString("Enter owner's password", "changeit");
String loginGood = UserInput.readString("Enter good user's login",
                                                        DemoProperties.getProperty(USER_JOHN_NAME));
String passwordGood = UserInput.readString("Enter good user's password",
                                                    DemoProperties.getProperty(USER_JOHN_PASSWORD));
String loginBad = UserInput.readString("Enter bad user's login",
                                                        DemoProperties.getProperty(USER_JANE_NAME));
String passwordBad = UserInput.readString("Enter bad user's password",
                                                    DemoProperties.getProperty(USER_JANE_PASSWORD));
System.out.println();

UDDI_Security_PortType security = getSecurityStub();
String authInfoOwner = getAuthInfo(owner, password, security);
Save_business saveBusiness = createSaveBusiness(name, description, loginGood, loginBad, authInfoOwner);
BusinessDetail result = saveBusiness(saveBusiness);
printBusinessDetail(result);
discardAuthInfo(authInfoOwner, security);

System.out.println(" ");
System.out.println("Finding business entity where");
String authInfoGood = getAuthInfo(loginGood, passwordGood, security);
Find_business findBusiness = createFindByName(searchName, authInfoGood);
BusinessList businessList = findBusiness(findBusiness);
printBusinessList(businessList);
discardAuthInfo(authInfoGood, security);

System.out.println(" ");
System.out.println("Finding business entity where");
String authInfoBad = getAuthInfo(loginBad, passwordBad, security);
findBusiness = createFindByName(searchName, authInfoBad);
businessList = findBusiness(findBusiness);
printBusinessList(businessList);
discardAuthInfo(authInfoGood, security);

createSaveBusiness操作を使用して、Save_businessオブジェクトが作成されます。ACLは、uddi:systinet.com:acl tModelKeyをkeyedReferenceにしてkeyedReferenceGroupに保存されます。ここではtModelKeyによってACLのtModelKeyが指定され、keyValueによってユーザーまたはグループのログイン名が保持され、最後にkeyNameを使用してkeyValue内のユーザーとグループが区別されます。

public static Save_business createSaveBusiness(String name,
	                                                         String description, String goodUser,
  String badUser, String authInfo) throws InvalidParameterException {
    System.out.println("name = " + name);
    System.out.println("description = " + description);
    System.out.println("goodUser = " + goodUser);
    System.out.println("badUser = " + badUser);

    BusinessEntity businessEntity = new BusinessEntity();
    businessEntity.addName(new Name(name));
    businessEntity.addDescription(new Description(description));

    CategoryBag categoryBag = new CategoryBag();
    businessEntity.setCategoryBag(categoryBag);
    KeyedReferenceGroup aclGroup = new KeyedReferenceGroup("uddi:systinet.com:acl");
    aclGroup.addKeyedReference(new KeyedReference("uddi:systinet.com:acl:find-allowed",
                                                                                  goodUser, "user"));
    aclGroup.addKeyedReference(new KeyedReference("uddi:systinet.com:acl:find-denied",
                                                                                   badUser, "user"));
    categoryBag.addKeyedReferenceGroup(aclGroup);

    Save_business save = new Save_business();
    save.addBusinessEntity(businessEntity);
    save.setAuthInfo(authInfo);

    return save;
}

find_business操作では、問合せを実行するユーザーの識別に使用されるauthInfoパラメータを取ります。

public static Find_business createFindByName(String name, String authInfo)
  throws InvalidParameterException {
System.out.println("name = " + name);
Find_business find_business = new Find_business();
find_business.addName(new Name(name));
find_business.setMaxRows(new Integer(MAX_ROWS));
find_business.setAuthInfo(authInfo);
find_business.addFindQualifier("approximateMatch");
return find_business;
}

デモのビルドと実行  目次

この項では、Oracle Service RegistryのACLデモをビルドして実行する方法を示します。

  1. デモが適切に構成され、Oracle Service Registryが実行中であることを確認してください。

  2. 次のディレクトリに移動します。

    Windows: %REGISTRY_HOME%¥demos¥security¥acl
    UNIX: $REGISTRY_HOME/demos/security/acl

  3. 次のコマンドを使用して、デモをビルドします。

    Windows: run.bat make
    UNIX: ./run.sh make

    注意注意

    Windowsプラットフォームでデモをコンパイルすると、次のテキストが表示されることがあります。

    A subdirectory or file ..\..\common\.\build\classes already exists.

    これは予想される現象であり、問題を示すものではありません。

  4. 利用可能なすべてのコマンドのリストを表示するには、次のコマンドを実行します。

    Windows: run.bat help
    UNIX: ./run.sh help

  5. 選択したデモを実行するには、runコマンドのパラメータにデモの名前を指定して実行します。たとえば、Findデモを実行するには、次のように起動します。

    Windows: run.bat Find
    UNIX: ./run.sh Find

    このデモの出力は次のようになります。

    Running Find demo...
    Saving business entity where
    Enter business name [ACL find demo]:
    Enter description [Demonstration of find-allowed, find-denied ACLs]:
    Enter search string [ACL%]:
    Enter entity owner [admin]:
    Enter owner's password [changeit]:
    Enter good user's login [demo_john]:
    Enter good user's password [demo_john]:
    Enter bad user's login [demo_jane]:
    Enter bad user's password [demo_jane]:
    
    Using Security at url https://mycomp.com:8443/registry/uddi/security .. done
    Authenticating the user admin .. done
    name = ACL find demo
    description = Demonstration of find-allowed, find-denied ACLs
    goodUser = demo_john
    badUser = demo_jane
    Using Publishing at url https://mycomp.com:8443/registry/uddi/publishing .. done
    Save business in progress ... done
    
    Business 1 : uddi:91ba8390-a8e0-11d8-b2ad-779f83c0b2ad
    <businessEntity businessKey="uddi:91ba8390-a8e0-11d8-b2ad-779f83c0b2ad"
    xmlns="urn:uddi-org:api_v3">
    <name>ACL find demo</name>
    <description>Demonstration of find-allowed, find-denied ACLs</description>
    <categoryBag>
    <keyedReferenceGroup tModelKey="uddi:systinet.com:acl">
    <keyedReference tModelKey="uddi:systinet.com:acl:find-allowed"
    keyName="user" keyValue="demo_john"/>
    <keyedReference tModelKey="uddi:systinet.com:acl:find-denied"
    keyName="user" keyValue="demo_jane"/>
    </keyedReferenceGroup>
    </categoryBag>
    </businessEntity>
    
    Logging out .. done
    
    Finding business entity where
    Authenticating the user demo_john .. done
    name = ACL%
    Using Inquiry at url http://mycomp.com:8888/registry/uddi/inquiry .. done
    Search in progress .. done
    
    Displaying 1 of 1, starting at position 1
    Business 1 : uddi:91ba8390-a8e0-11d8-b2ad-779f83c0b2ad
    <businessInfo businessKey="uddi:91ba8390-a8e0-11d8-b2ad-779f83c0b2ad"
    xmlns="urn:uddi-org:api_v3">
    <name>ACL find demo</name>
    <description>Demonstration of find-allowed, find-denied ACLs</description>
    </businessInfo>
    
    Logging out .. done
    
    Finding business entity where
    Authenticating the user demo_jane .. done
    name = ACL%
    Using Inquiry at url http://mycomp.com:8888/registry/uddi/inquiry .. done
    Search in progress .. done
    
    Displaying 0 of 0, starting at position 1
    Nothing found
    Logging out .. done
  6. デモを再ビルドするには、run.bat clean./run.sh clean)を実行してclassesディレクトリを削除し、run.bat make./run.sh make)を実行してデモ・クラスを再ビルドします。