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, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。