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.