|
JAAS | |||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object | +--javax.security.auth.Policy | +--com.sun.security.auth.PolicyFile
sun.security.provider.PolicyFile
に置き換えられる。このクラスの使用は推奨されない
javax.security.auth.Policy
のデフォルトの実装を表します。
Java ランタイム全体のポリシーを格納し、複数のファイルに存在する複数の静的ポリシー構成を合わせます。ポリシーファイルを検出し、その情報を Policy
オブジェクトに読み込むアルゴリズムは次のとおりです。
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
を指定します。各ポリシーが読み込まれ、ロードされます。
java.lang.System
のプロパティである java.security.auth.policy にも、別のポリシーファイルを参照する URL
を設定できます (実行時に -D スイッチを使用する場合)。このプロパティが定義されており、このプロパティを使用するようにセキュリティプロパティファイルに設定されている (セキュリティプロパティ policy.allowSystemProperty が true) 場合は、参照されているポリシーがロードされます。
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
で開始します。 signedBy
と codeBase
は名前と値のペアで、省略可能です。省略されている場合は、任意の署名者 (署名なしのコードを含む) が一致し、任意の codeBase が一致します。principal
の名前と値のペアは省略できません。この場合の Policy
実装では、プリンシパルベースの grant エントリだけを含めることができます。principalClass はワイルドカード * を設定することができ、その場合は任意の Principal
クラスが一致します。さらに、principalName にワイルドカード * を設定することで、任意の Principal
名に一致させることができます。principalName に * を設定するときは、* を引用符で囲まないでください。
permission エントリは、permission
で開始します。前述のテンプレートにある Type
は特定のアクセス権タイプを表しており、java.io.FilePermission
や java.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
がシステムクラス (i.e., is found on the CLASSPATH) である場合に、Foo タイプのアクセス権に権限が付与されます。
エントリ内にある項目は、指定された順番 (permission
、Type、"name"、"action" の順) に並んでいる必要があります。エントリの末尾にはセミコロンが付きます。
文字の大文字小文字は、識別子 (permission
、signedBy
、codeBase
など) では関係ありませんが、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 を検査し、指定した Subject や CodeSource に付与したアクセス権を返します。
|
void |
refresh()
推奨されていません。 すべてのポリシーファイルを読み込み直すことで、Policy オブジェクトをリフレッシュします。 |
クラス javax.security.auth.Policy から継承したメソッド |
getPolicy, setPolicy |
クラス java.lang.Object から継承したメソッド |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
コンストラクタの詳細 |
public PolicyFile()
メソッドの詳細 |
public void refresh()
Policy
内の refresh
SecurityException
- 呼び出し元に Policy
のリフレッシュ許可がない場合public PermissionCollection getPermissions(Subject subject, CodeSource codesource)
Policy
を検査し、指定した Subject
や CodeSource
に付与したアクセス権を返します。
エントリ内で指定した codeBase や signedBy の値を使用して構築された CodeSource
にメソッドに渡される CodeSource
が含まれる (implies
) 場合、およびこのメソッドに渡される Subject
にエントリ内で指定したすべてのプリンシパルが含まれる場合は、特定の grant エントリに対するアクセス権が返されます。
grant エントリで指定した各 Principal
「P1」に対して、次の 2 つの条件のうちどちらかを満たす場合は、このメソッドに渡される Subject
にエントリで指定したすべてのプリンシパルが含まれます。
Subject
が Principal
「P2」を持ち、P2.getClass().getName()
の値が P1 のクラス名に、P2.getName()
の値が P1 の名前に、それぞれ等しい
com.sun.security.auth.PrincipalComparator
を、P1.implies
では与えられた Subject
を、それぞれ実装している
この Policy
では、PrivateCredentialPermissions に対する特別な処理を実装しています。Principal
クラスと名前に self を指定した PrivateCredentialPermission
が渡されると、返す PermissionCollection
に Permission
を追加しません。代わりに、与えられた Subject
に関連付けられた各 Principal
に対して、新しい PrivateCredentialPermission
を構築します。それぞれの新しい PrivateCredentialPermission
にはそれぞれの Principal
の Class と名前のほかに、当初与えられたアクセス権で指定したのと同じクレデンシャルクラスが含まれます。
Policy
内の getPermissions
subject
- この Subject
に与えられたアクセス権と、追加で渡した CodeSource
が返される。
codesource
- この CodeSource
に与えられたアクセス権と、追加で渡した Subject
が返される
Subject
と CodeSource
に与えられたアクセス権
|
JAAS | |||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |