public PermissionCollection getPermissions
(java.security.ProtectionDomain pd)
また、ProtectionDomain には次のコンストラクタがあります。
public ProtectionDomain
(CodeSource cs,
PermissionCollection permissions,
ClassLoader loader,
Principal[] principals)
これら 2 つの API は、呼び出し側に、Principal ベースの Permission エントリ用 Policy の問い合わせを実行する手段を提供します。@Deprecated 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 セキュリティープロパティー (Java セキュリティープロパティーファイル) に、目的の Policy 実装クラスの完全指定名を設定することにより変更できます。Java セキュリティープロパティーファイルは、<JAVA_HOME>/lib/security/java.security という名前のファイルとして格納されています。<JAVA_HOME> は java.home システムプロパティーの値を参照しており、JRE のインストールディレクトリを示します。
| 修飾子 | コンストラクタと説明 |
|---|---|
protected |
Policy()
非推奨。
唯一のコンストラクタです。
|
| 修飾子と型 | メソッドと説明 |
|---|---|
abstract PermissionCollection |
getPermissions(Subject subject, CodeSource cs)
非推奨。
指定した
CodeSource に関連付けられた Principal に付与された Permission を取得します。 |
static Policy |
getPolicy()
非推奨。
インストール済みの Policy オブジェクトを返します。
|
abstract void |
refresh()
非推奨。
Policy のリフレッシュおよび再ロードを実行します。
|
static void |
setPolicy(Policy policy)
非推奨。
システム全体の Policy オブジェクトを設定します。
|
public static Policy getPolicy()
AuthPermission("getPolicy") 権限で SecurityManager.checkPermission を呼び出し、呼び出し側が Policy オブジェクトを取得する権限を持っているどうかを確認します。
null にならない。SecurityException - 現在のスレッドが Policy オブジェクトを取得する権限を持たない場合。setPolicy(javax.security.auth.Policy)public static void setPolicy(Policy policy)
AuthPermission("setPolicy") 権限で SecurityManager.checkPermission を呼び出し、呼び出し側が Policy を設定する権限を持っているどうかを確認します。
policy - 新規システム Policy オブジェクト。SecurityException - 現在のスレッドが Policy を設定する権限を持たない場合。getPolicy()public abstract PermissionCollection getPermissions(Subject subject, CodeSource cs)
CodeSource に関連付けられた Principal に付与された Permission を取得します。
subject - Subject。これに関連付けられた Principal と、指定された CodeSource によって、このメソッドによって返される Permission が決まる。このパラメータは null になる可能性がある。cs - CodeSource によって指定されたコード。これと、指定された Subject によって、このメソッドによって返される Permission が決まる。このパラメータは null になる可能性がある。Subject およびコードに付与された Permission のコレクション。public abstract void refresh()
このメソッドは、このオブジェクトに、現在のポリシーのリフレッシュや再ロードを行わせます。この処理は実装に依存します。たとえば Policy オブジェクトがファイルに格納されている場合、refresh を呼び出すと、ファイルがもう一度読み取られることになります。
SecurityException - 呼び出し側に、Policy をリフレッシュする権限がない場合。 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.