JavaTM 2
Platform
Std. Ed. v1.4.0

javax.security.auth
クラス Policy

java.lang.Object
  |
  +--javax.security.auth.Policy

推奨されていません。 JDK バージョン 1.4 で、java.security.Policy に置き換えられました。java.security.Policy には次のメソッドが存在します。
 	public PermissionCollection getPermissions
  	    (java.security.ProtectionDomain pd)
 
 
また、ProtectionDomain には次のコンストラクタがあります。
	public ProtectionDomain
	    (CodeSource cs,
	     PermissionCollection permissions,
	     ClassLoader loader,
	     Principal[] principals)
 
これら 2 つの API は、呼び出し側に、Principal ベースの Permission エントリ用 Policy の問い合わせを実行する手段を提供します。

public abstract class Policy
extends Object

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
 

コンストラクタの詳細

Policy

protected Policy()
推奨されていません。 
唯一のコンストラクタです。サブクラスのコンストラクタによる呼び出しは、通常は暗黙的な呼び出しです。

メソッドの詳細

getPolicy

public static Policy getPolicy()
推奨されていません。 
インストール済みの Policy オブジェクトを返します。このメソッドは最初に AuthPermission("getPolicy") アクセス権を使って SecurityManager.checkPermission を呼び出して、呼び出し側に Policy オブジェクトを取得できるアクセス権があるかどうかを確認します。

戻り値:
インストール済みの Policy。戻り値は null にならない
例外:
SecurityException - 現在のスレッドが Policy オブジェクトを取得するアクセス権を持たない場合
関連項目:
setPolicy(javax.security.auth.Policy)

setPolicy

public static void setPolicy(Policy policy)
推奨されていません。 
システム全体の Policy オブジェクトを設定します。このメソッドは最初に AuthPermission("setPolicy") アクセス権を使って SecurityManager.checkPermission を呼び出して、呼び出し側に Policy を設定するアクセス権があるかどうかを確認します。

パラメータ:
policy - 新規システム Policy オブジェクト
例外:
SecurityException - 現在のスレッドが Policy を設定するアクセス権を持たない場合
関連項目:
getPolicy()

getPermissions

public abstract PermissionCollection getPermissions(Subject subject,
                                                    CodeSource cs)
推奨されていません。 
指定した CodeSource に関連付けられた Principal に付与された Permission を取得します。

パラメータ:
subject - SubjectSubject に関連付けられた Principal は、指定した CodeSource と共に、このメソッドが返す Permission を判定する。このパラメータは null も可

cs - CodeSource が指定したコード。CodeSource は指定した Subject と共に、このメソッドが返す Permission を判定する。このパラメータは null も可
戻り値:
subject および cs パラメータで指定されたすべての Subject およびコードに付与された Permission の Collection

refresh

public abstract void refresh()
推奨されていません。 
Policy のリフレッシュおよび再ロードを実行します。

このメソッドは、このオブジェクトが、現在のポリシーのリフレッシュや再ロードを行う原因となります。これは実装に依存します。たとえば Policy オブジェクトがファイルに格納されている場合、refresh を呼び出すと、ファイルがもう一度読み取られることになります。

例外:
SecurityException - 呼び出し側に、Policy をリフレッシュするアクセス権がない場合

JavaTM 2
Platform
Std. Ed. v1.4.0

バグの報告と機能のリクエスト
これ以外の API リファレンスおよび開発者用ドキュメントについては、 Java 2 SDK SE 開発者用ドキュメントを参照してください。 開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、 およびコード実例が含まれています。

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.