JavaTM 2 Platform
Standard Ed. 5.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 の問い合わせを実行する手段を提供します。

@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 オブジェクトを返します。この Permissions オブジェクトには、指定した subject に関連付けられた Principal に付与され、かつ codeSource で指定されたコードに付与された Permission があります。

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 からのコードに、Permission が 1 つあることを指定しています。この Permission では、/home/duke ディレクトリへのファイルの読み書きを、実行するコードに許可します。

ある Principal で「実行」するには、コードで Subject.doAs(subject, ...) メソッドを呼び出します。このメソッドを呼び出すと、指定した Subject に関連付けられたすべての Principal でコードは実行されます。この Policy およびこの Policy に付与された Permission は、Subject.doAs の呼び出し後に有効になります。

1 つの grant エントリ内に、複数の Principal を記述できます。grant エントリ内に指定されたすべての Principal が Subject.doAs に渡される Subject に関連付けられている場合のみ、指定された Permissions がその 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
Standard Ed. 5.0

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

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。