JAAS

com.sun.security.auth
クラス PolicyFile

java.lang.Object
  上位を拡張 javax.security.auth.Policy
      上位を拡張 com.sun.security.auth.PolicyFile

推奨されていません。 JDK 1.4 では sun.security.provider.PolicyFile に置き換えられます。このクラスの使用は推奨されていません。

@Deprecated
public class PolicyFile
extends Policy

javax.security.auth.Policy のデフォルトの実装を表します。

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

  1. java.security.Security のプロパティ auth.policy.url.1、auth.policy.url.2、...、auth.policy.url.X に対してループ処理を行います。これらのプロパティは <JAVA_HOME>/lib/security/java.security という名前の Java セキュリティプロパティファイルに設定されます (<JAVA_HOME> は JDK のインストールディレクトリ)。それぞれのプロパティ値では、ロードされるポリシーファイルを参照する URL を指定します。各ポリシーが読み込まれ、ロードされます。
  2. java.lang.System のプロパティである java.security.auth.policy にも、別のポリシーファイルを参照する URL を設定できます (実行時に -D スイッチを使用する場合)。このプロパティが定義されており、このプロパティを使用するようにセキュリティプロパティファイルに設定されている (セキュリティプロパティ policy.allowSystemProperty が true) 場合は、参照されているポリシーがロードされます。
  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 エントリは、grant で開始します。 signedBycodeBase は名前と値のペアで、省略可能です。省略されている場合は、任意の署名者 (署名なしのコードを含む) が一致し、任意の codeBase が一致します。principal の名前と値のペアは省略できません。この場合の Policy 実装では、主体ベースの grant エントリだけを含めることができます。principalClass はワイルドカード * を設定することができ、その場合は任意の Principal クラスが一致します。さらに、principalName にワイルドカード * を設定することで、任意の Principal 名に一致させることができます。principalName に * を設定するときは、* を引用符で囲まないでください。

permission エントリは、permission で開始します。前述のテンプレートにある Type は特定のアクセス権タイプを表しており、java.io.FilePermissionjava.lang.RuntimePermission などを指定します。

"action" は java.io.FilePermission など、多くのアクセス権の種類で必須です (許可するファイルアクセスの種類を指定する)。java.lang.RuntimePermission などのカテゴリでは不要なため、必須ではありません。タイプ名に続く "name" 値で指定するか、あるいは指定しません。

permission エントリ内の signedBy の名前と値のペアは省略可能です。存在する場合は、署名済みの許可を意味します。つまり、権限が付与されるために permission クラス自体が与えられたエイリアスで署名されていなければなりません。たとえば次の grant エントリを考えてみます。


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

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

エントリ内にある項目は、指定された順番 (permission、Type、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 自体の private 資格へのアクセス許可を与えます。たとえば、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 自体のすべての private 資格へのアクセスを許可する例を次に示します。

   grant principal foo.com.Principal "Duke" {
        permission javax.security.auth.PrivateCredentialPermission
                "* self",
                "read";
    };
 
名前に関係なく SolarisPrincipal として承認されたすべての Subject に、Subject 自体の private 資格へのアクセスを許可する例を次に示します。

   grant principal com.sun.security.auth.SolarisPrincipal * {
        permission javax.security.auth.PrivateCredentialPermission
                "* self",
                "read";
    };
 
すべての Subject に、Subject 自体の private 資格へのアクセスを許可する例を次に示します。

   grant principal * * {
        permission javax.security.auth.PrivateCredentialPermission
                "* self",
                "read";
    };
 

関連項目:
CodeSource, Permissions, ProtectionDomain

コンストラクタの概要
PolicyFile()
          推奨されていません。 Policy オブジェクトを初期化し、デフォルトのポリシー構成ファイルを Policy オブジェクトに読み込みます。
 
メソッドの概要
 PermissionCollection getPermissions(Subject subject, CodeSource codesource)
          推奨されていません。 Policy を検査し、指定した SubjectCodeSource に付与したアクセス権を返します。
 void refresh()
          推奨されていません。 すべてのポリシーファイルを読み込み直すことで、Policy オブジェクトをリフレッシュします。
 
クラス javax.security.auth.Policy から継承されたメソッド
getPolicy, setPolicy
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

PolicyFile

public PolicyFile()
推奨されていません。 
Policy オブジェクトを初期化し、デフォルトのポリシー構成ファイルを Policy オブジェクトに読み込みます。

メソッドの詳細

refresh

public void refresh()
推奨されていません。 
すべてのポリシーファイルを読み込み直すことで、Policy オブジェクトをリフレッシュします。

定義:
クラス Policy 内の refresh
例外:
SecurityException - 呼び出し元に Policy のリフレッシュ許可がない場合

getPermissions

public PermissionCollection getPermissions(Subject subject,
                                           CodeSource codesource)
推奨されていません。 
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 を、P1.implies では与えられた Subject を、それぞれ実装している

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

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

codesource - この CodeSource に与えられたアクセス権と、追加で渡した Subject が返される
戻り値:
渡した SubjectCodeSource に与えられたアクセス権

JAAS