モジュール jdk.security.auth
パッケージ com.sun.security.auth

クラスPolicyFile


  • 削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。 
    JDK 1.4以降は、sun.security.provider.PolicyFileに置き換えられています。 このクラスの使用は推奨されていません。 このクラスは、Java SEの将来のバージョンで削除される可能性があります。

    @Deprecated(since="1.4",
                forRemoval=true)
    public class PolicyFile
    extends Policy
    このクラスはjavax.security.auth.Policyのデフォルトの実装を表します。

    Javaランタイム全体のポリシーを格納し、複数のファイルに存在する複数の静的ポリシー構成を合わせます。 ポリシー・ファイルを検出し、その情報をこのPolicyオブジェクトに読み込むアルゴリズムは次のとおりです。

    1. セキュリティ・プロパティauth.policy.url.1auth.policy.url.2、...、auth.policy.url.Xに対してループ処理を行います。 それぞれのプロパティ値では、ロードされるポリシー・ファイルを参照するURLを指定します。 各ポリシーが読み込まれ、ロードされます。
    2. java.lang.Systemのプロパティであるjava.security.auth.policyにも、別のポリシー・ファイルを参照するURLを設定できます(実行時に -Dスイッチを使用する場合)。 このプロパティが定義されており、このプロパティの使用がセキュリティ・プロパティ・ファイルで許可されている(セキュリティ・プロパティpolicy.allowSystemPropertytrue)場合は、そのポリシーもロードされます。
    3. java.security.auth.policyプロパティが「==」(「=」ではない)を使用して定義されている場合、ほかに指定したポリシーはすべて無視され、このポリシーだけがロードされます。
    それぞれのポリシー・ファイルは1つ以上のgrantエントリで構成され、それぞれのエントリは複数のpermissionエントリで構成されています。
       grant signedBy "alias", codeBase "URL",
             principal principalClass "principalName",
             principal principalClass "principalName",
             ... {
    
         permission Type "name "action",
             signedBy "alias";
         permission Type "name "action",
             signedBy "alias";
         ....
       };
     
    前述の太字でない項目は表記のとおりである必要があります。ただし、後で説明するように、大文字小文字は関係なく、また省略可能な項目があります。 イタリックで示されている項目は、可変の項目です。

    付与エントリは、grantで始まります。 signedBycodeBaseは名前と値のペアで、オプションです。 省略されている場合は、任意の署名者(署名なしのコードを含む)が一致し、任意のcodeBaseが一致します。 principalの名前と値のペアはオプションではありません。 この場合のPolicy実装では、主体ベースのgrantエントリだけが許可されます。 principalClassはワイルドカード値*に設定することができ、その場合は任意のPrincipalクラスが一致します。 さらに、principalNameにワイルドカード値*を設定することで、任意のPrincipal名に一致させることができます。 principalNameに*を設定するときは、*を引用符で囲まないでください。

    アクセス権エントリは、permissionで始まります。 上記のテンプレートのTypeという単語は、java.io.FilePermissionjava.lang.RuntimePermissionなどの特定のアクセス許可のタイプです。

    "action"はjava.io.FilePermissionなど、多くのアクセス権のタイプで必須です(許可するファイル・アクセスのタイプを指定する)。 必要でないjava.lang.RuntimePermissionなどのカテゴリには必須ではありません - タイプ名の後に"name"値で指定された許可があるか、そうでない場合のいずれかです。

    アクセス権エントリのsignedByの名前と値のペアは省略可能です。 この値が存在する場合は、署名付きアクセス権であることを示します。 つまり、権限が付与されるためにpermissionクラス自体が与えられたエイリアスで署名されている必要があります。 たとえば、次のような付与エントリがあるとします。

       grant principal foo.com.Principal "Duke" {
         permission Foo "foobar", signedBy "FooSoft";
       }
     

    この場合、Foo.classアクセス権が「FooSoft」エイリアスによって署名されているか、あるいはFoo.classがシステム・クラス(つまりCLASSPATHにある)である場合に、Fooタイプのアクセス権に権限が付与されます。

    エントリ内にある項目は、指定された順番(permissionType、"name"、"action"の順)に並んでいる必要があります。 各エントリはセミコロンで終わります。

    文字の大文字小文字は、識別子(permissionsignedBycodeBaseなど)では関係ありませんが、Typeや、値として渡される文字列にとっては重要です。

    ポリシー構成ファイルから取り出した2つのエントリの例を次に示します。

       // if the code is comes from "foo.com" and is running as "Duke",
       // grant it read/write to all files in /tmp.
    
       grant codeBase "foo.com", principal foo.com.Principal "Duke" {
                  permission java.io.FilePermission "/tmp/*", "read,write";
       };
    
       // grant any code running as "Duke" permission to read
       // the "java.vendor" Property.
    
       grant principal foo.com.Principal "Duke" {
             permission java.util.PropertyPermission "java.vendor";
     

    上記のPolicyの実装では、PrivateCredentialPermissionsに対する特別な処理をサポートしています。 grantエントリがPrivateCredentialPermissionで構成されており、そのPrivateCredentialPermissionの「主体クラス」や「主体名」が「self」の場合、指定したSubjectにSubject自体の非公開資格へのアクセス許可を与えます。 たとえば、Subjectである「Duke」に、Duke自体のa.b.Credentialへのアクセスを許可する例を次に示します。

       grant principal foo.com.Principal "Duke" {
          permission javax.security.auth.PrivateCredentialPermission
                  "a.b.Credential self",
                  "read";
        };
     
    Subjectである「Duke」に、Duke自体のすべての非公開資格へのアクセスを許可する例を次に示します。
       grant principal foo.com.Principal "Duke" {
          permission javax.security.auth.PrivateCredentialPermission
                  "* self",
                  "read";
        };
     
    名前に関係なくSolarisPrincipalとして認証されたすべてのSubjectに、Subject自体の非公開資格へのアクセスを許可する例を次に示します。
       grant principal com.sun.security.auth.SolarisPrincipal * {
          permission javax.security.auth.PrivateCredentialPermission
                  "* self",
                  "read";
        };
     
    すべてのSubjectに、Subject自体の非公開資格へのアクセスを許可する例を次に示します。
       grant principal * * {
          permission javax.security.auth.PrivateCredentialPermission
                  "* self",
                  "read";
        };
     
    関連項目:
    CodeSource, Permissions, ProtectionDomain, セキュリティ・プロパティ
    • コンストラクタのサマリー

      コンストラクタ 
      コンストラクタ 説明
      PolicyFile​()
      削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。 
      Policyオブジェクトを初期化し、デフォルトのポリシー構成ファイルをPolicyオブジェクトに読み込みます。
    • コンストラクタの詳細

      • PolicyFile

        public PolicyFile​()
        削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。 
        Policyオブジェクトを初期化し、デフォルトのポリシー構成ファイルをPolicyオブジェクトに読み込みます。
    • メソッドの詳細

      • refresh

        public void refresh​()
        削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。 
        すべてのポリシー・ファイルを読込み直すことで、Policyオブジェクトをリフレッシュします。
        定義:
        refresh 、クラス:  Policy
        例外:
        SecurityException - 呼出し元にPolicyをリフレッシュするアクセス権がない場合。
      • getPermissions

        public PermissionCollection getPermissions​(Subject subject,
                                                   CodeSource codesource)
        削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。 
        このPolicyを検査し、指定したSubjectCodeSourceに付与したアクセス権を返します。

        エントリ内で指定したcodeBaseやsignedByの値を使用して構築されたCodeSourceに、このメソッドに渡されるCodeSourceが含まれる(implies)場合、およびこのメソッドに渡されるSubjectにエントリ内で指定したすべての主体が含まれる場合は、特定のgrantエントリに対するアクセス権が返されます。

        grantエントリで指定した各Principal「P1」に対して、次の2つの条件のうちどちらかを満たす場合は、このメソッドに渡されるSubjectに、エントリで指定したすべての主体が含まれます。

        1. SubjectPrincipal「P2」を持ち、P2.getClass().getName()の値がP1のクラス名に、P2.getName()の値がP1の名前に、それぞれ等しい。
        2. P1はcom.sun.security.auth.PrincipalComparatorを実装し、渡されたSubjectP1.impliesである。

        このPolicyでは、PrivateCredentialPermissionsに対する特別な処理を実装しています。 このメソッドがPrincipalクラスと名前に「self」を指定したPrivateCredentialPermissionを検出するとき、返されるPermissionCollectionにそのPermissionを追加しません。 代わりに、与えられたSubjectに関連付けられた各Principalに対して、新しいPrivateCredentialPermissionを構築します。 それぞれの新しいPrivateCredentialPermissionにはそれぞれのPrincipalのクラスと名前のほかに、当初与えられたアクセス権で指定したのと同じ資格クラスが含まれます。

        定義:
        getPermissions 、クラス:  Policy
        パラメータ:
        subject - このSubjectに与えられたアクセス権と、追加で渡したCodeSourceが返されます。
        codesource - このCodeSourceに与えられたアクセス権と、追加で渡したSubjectが返されます。
        戻り値:
        渡したSubject CodeSourceに与えられたアクセス権。