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.