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セキュリティ・プロパティの値に、目的のPolicy実装クラスの完全修飾名を設定することにより変更できます。
セキュリティ・プロパティ| 修飾子 | コンストラクタと説明 |
|---|---|
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, 2014, Oracle and/or its affiliates. All rights reserved.