|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||||
java.lang.Object | +--javax.security.auth.Policy
public PermissionCollection getPermissions (java.security.ProtectionDomain pd)また、ProtectionDomain には次のコンストラクタがあります。
public ProtectionDomain (CodeSource cs, PermissionCollection permissions, ClassLoader loader, Principal[] principals)これら 2 つの API は、呼び出し側に、Principal ベースの Permission エントリ用 Policy の問い合わせを実行する手段を提供します。
Subject ベースの承認のシステムポリシーを表す abstract クラスです。このクラスのサブクラス実装では、Subject ベースのアクセス制御 Policy を指定する方法を提供します。
Policy オブジェクトは、次の方法で、Principal として実行しているコードに付与された Permission のセットをクエリーすることができます。
policy = Policy.getPolicy(); PermissionCollection perms = policy.getPermissions(subject, codeSource);
Policy オブジェクトではローカルポリシーを参照して、適切な Permissions オブジェクトを返します。返される Permissions オブジェクトには、指定した subject に関連付けられた Principal に付与され、指定した codeSource により指定されたコードに付与された Permission があります。
Policy には、以下に示す情報が格納されます。この例では、単にデフォルトの Policy 実装の構文を表しています。このクラスのサブクラス実装では別の構文を実装でき、ファイル、データベース、サーバといった任意のソースから Policy を取得できます。
Policy の各エントリは、grant エントリとして表されます。各 grant エントリでは、コードベース、コードの署名者、Principal に関する 3 項目、そしてその 3 項目に付与された Permission を指定します。
grant CodeBase ["URL"], Signedby ["signers"],
Principal [Principal_Class] "Principal_Name" {
Permission Permission_Class ["Target_Name"]
[, "Permission_Actions"]
[, signedBy "SignerName"];
};
3 項目の名前と値ペアにおける 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 からのコードに、Permission が 1 つあることを指定しています。この Permission では、/home/duke ディレクトリへのファイルの読み書きを、実行するコードに許可します。
ある Principal で「実行」するには、コードで Subject.doAs(subject, ...) メソッドを呼び出します。このメソッドを呼び出すと、指定した Subject に関連付けられたすべての Principal でコードは実行されます。この Policy (およびこの Policy に付与された Permission) は、Subject.doAs の呼び出し後に有効になります。
1 つの grant エントリ内に、複数の Principal を記述できます。grant エントリ内の Principal はすべて、指定した Permission を付与される Subject について、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 実装は、(Java セキュリティプロパティファイルの) auth.policy.provider セキュリティプロパティに、希望する Policy 実装クラスの完全指定名を設定することにより変更できます。Java セキュリティプロパティファイルは、<JAVA_HOME>/lib/security/java.security という名前のファイルに格納されています。ここで、<JAVA_HOME> は JDK のインストール先ディレクトリを示します。
| コンストラクタの概要 | |
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 オブジェクトを設定します。 |
| クラス java.lang.Object から継承したメソッド |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| コンストラクタの詳細 |
protected 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。Subject に関連付けられた Principal は、指定した CodeSource と共に、このメソッドが返す Permission を判定する。このパラメータは null も可
cs - CodeSource が指定したコード。CodeSource は指定した Subject と共に、このメソッドが返す Permission を判定する。このパラメータは null も可
- 戻り値:
- subject および cs パラメータで指定されたすべての
Subject およびコードに付与された Permission の Collection public abstract void refresh()
このメソッドは、このオブジェクトが、現在のポリシーのリフレッシュや再ロードを行う原因となります。これは実装に依存します。たとえば Policy オブジェクトがファイルに格納されている場合、refresh を呼び出すと、ファイルがもう一度読み取られることになります。
SecurityException - 呼び出し側に、Policy をリフレッシュするアクセス権がない場合
|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||||
Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.