モジュール java.base
パッケージ javax.security.auth

クラスPolicy

  • 直系の既知のサブクラス:
    PolicyFile

    非推奨。 
    JDK Version 1.4で、java.security.Policyに置き換えられました。java.security.Policyには次のメソッドが存在します。
          public PermissionCollection getPermissions
              (java.security.ProtectionDomain pd)
    
     
    また、ProtectionDomainには次のコンストラクタがあります。
          public ProtectionDomain
              (CodeSource cs,
               PermissionCollection permissions,
               ClassLoader loader,
               Principal[] principals)
     
    これら2つのAPIは、呼出し側に、PrincipalベースのPermissionエントリ用Policyの問い合わせを実行する手段を提供します。

    @Deprecated(since="1.4")
    public abstract class Policy
    extends Object

    Subjectベースの承認のシステム・ポリシーを表すabstractクラスです。 このクラスのサブクラス実装では、Subjectベースのアクセス制御Policyを指定する方法を提供します。

    Policyオブジェクトは、次の方法で、Principalとして実行しているコードに付与されたPermissionのセットを問い合わせることができます。

          policy = Policy.getPolicy();
          PermissionCollection perms = policy.getPermissions(subject,
                                                          codeSource);
     
    Policyオブジェクトはローカル・ポリシーを参照して、適切なPermissionsオブジェクトを返します。このオブジェクトは、提供されたsubjectに関連付けられたPrincipalに付与された権限、および提供されたcodeSourceで指定されたコードに付与された権限を持ちます。

    Policyには、次に示す情報が格納されます。 この例は、単にデフォルトのPolicy実装の構文を表しています。 このクラスのサブクラス実装では別の構文を実装することもでき、ファイル、データベース、サーバーといった任意のソースからPolicyを取得することもできます。

    Policy内の各エントリは、grantエントリとして表されます。 grantエントリでは、コード・ベース、コードの署名者、およびPrincipalから成るトリプレット、そしてそのトリプレットに付与されたPermissionを指定します。

          grant CodeBase ["URL"], Signedby ["signers"],
                Principal [Principal_Class] "Principal_Name" {
              Permission Permission_Class ["Target_Name"]
                                          [, "Permission_Actions"]
                                          [, signedBy "SignerName"];
          };
     
    名前/値ペアのトリプレットのうち、CodeBaseコンポーネントとSignedbyコンポーネントは省略可能です。 それらが存在しない場合、コードベースは一致し、署名者(符号なしコードを含む)は一致します。 次に例を示します。
          grant CodeBase "foo.com", Signedby "foo",
                Principal com.sun.security.auth.SolarisPrincipal "duke" {
              permission java.io.FilePermission "/home/duke", "read, write";
          };
     
    このgrantエントリは、fooによって署名され、dukeという名前でSolarisPrincipalとして実行されているfoo.comのコードが、1つのPermissionを持つことを指定しています。 このPermissionは、/home/dukeディレクトリへのファイルの読書きを実行コードに許可します。

    特定のPrincipalとして実行するには、コードでSubject.doAs(subject, ...)メソッドを呼び出します。 このメソッドを呼び出すと、指定したSubjectに関連付けられたすべてのPrincipalとしてコードが実行されます。 このPolicyおよびこのPolicyに付与されたPermissionは、Subject.doAsの呼出し後に有効になります。

    1つのgrantエントリに複数のPrincipalを指定することも可能です。 指定されたPermissionがSubjectに付与されるためには、grantエントリ内のすべてのPrincipalがSubject.doAsに渡されるSubjectに関連付けられている必要があります。

          grant Principal com.sun.security.auth.SolarisPrincipal "duke",
                Principal com.sun.security.auth.SolarisNumericUserPrincipal "0" {
              permission java.io.FilePermission "/home/duke", "read, write";
              permission java.net.SocketPermission "duke.com", "connect";
          };
     
    このエントリでは、dukeと0の両方で実行されるコードに、dukeのホーム・ディレクトリ内のファイルへの読書きアクセス権を付与し、さらにduke.comへのソケット接続を行う権利を付与します。

    Principalベースでないgrantエントリは、このPolicyでは許可されません。 したがって、次のようなgrantエントリは

          grant CodeBase "foo.com", Signedby "foo" {
              permission java.io.FilePermission "/tmp/scratch", "read, write";
          };
     
    拒否されます。 このようなアクセス権はjava.security.Policyに記述する必要があります。

    デフォルトのPolicy実装は、auth.policy.providerセキュリティ・プロパティの値に、目的のPolicy実装クラスの完全修飾名を設定することにより変更できます。

    導入されたバージョン:
    1.4
    関連項目:
    セキュリティ・プロパティ
    • コンストラクタの詳細

      • ポリシー

        protected Policy​()
        非推奨。 
        唯一のコンストラクタです。 サブクラスのコンストラクタによる呼出し用で、通常は暗黙的に呼び出されます。
    • メソッドの詳細

      • getPolicy

        public static Policy getPolicy​()
        非推奨。 
        インストール済みのPolicyオブジェクトを返します。 このメソッドは最初にAuthPermission("getPolicy")権限でSecurityManager.checkPermissionを呼び出し、呼出し側がPolicyオブジェクトを取得する権限を持っているどうかを確認します。
        戻り値:
        インストール済みのPolicy。 戻り値はnullにならない。
        例外:
        SecurityException - 現在のスレッドがPolicyオブジェクトを取得する権限を持たない場合。
        関連項目:
        setPolicy(javax.security.auth.Policy)
      • setPolicy

        public static void setPolicy​(Policy policy)
        非推奨。 
        システム全体のPolicyオブジェクトを設定します。 このメソッドは最初にAuthPermission("setPolicy")権限でSecurityManager.checkPermissionを呼び出し、呼出し側がPolicyを設定する権限を持っているどうかを確認します。
        パラメータ:
        policy - 新規システムPolicyオブジェクト。
        例外:
        SecurityException - 現在のスレッドがPolicyを設定する権限を持たない場合。
        関連項目:
        getPolicy()
      • getPermissions

        public abstract PermissionCollection getPermissions​(Subject subject,
                                                            CodeSource cs)
        非推奨。 
        指定したCodeSourceに関連付けられたPrincipalに付与されたPermissionを取得します。
        パラメータ:
        subject - Subject。これに関連付けられたPrincipalと、指定されたCodeSourceによって、このメソッドによって返されるPermissionが決まる。 このパラメータはnullになる可能性がある。
        cs - CodeSourceによって指定されたコード。これと、指定されたSubjectによって、このメソッドによって返されるPermissionが決まる。 このパラメータはnullになる可能性がある。
        戻り値:
        提供されたsubjectおよびcsパラメータで指定されたすべてのSubjectおよびコードに付与されたPermissionのコレクション。
      • refresh

        public abstract void refresh​()
        非推奨。 
        Policyのリフレッシュおよび再ロードを実行します。

        このメソッドは、このオブジェクトに、現在のポリシーのリフレッシュや再ロードを行わせます。 この処理は実装に依存します。 たとえばPolicyオブジェクトがファイルに格納されている場合、refreshを呼び出すと、ファイルがもう一度読み取られることになります。

        例外:
        SecurityException - 呼出し側に、Policyをリフレッシュする権限がない場合。