JavaTM 2
Platform
Std. Ed. v1.4.0

javax.security.auth
クラス Subject

java.lang.Object
  |
  +--javax.security.auth.Subject
すべての実装インタフェース:
Serializable

public final class Subject
extends Object
implements Serializable

Subject は、個人などの単一エンティティに関する関連情報をグループ化したものです。この種の情報には、Subject の識別情報や、セキュリティ関連の属性 (パスワードや暗号化鍵など) が含まれます。

Subject には、潜在的に複数の識別情報があります。それぞれの識別情報は、Subject 内の Principal で表されます。Principal は単に名前を Subject にバインドしているだけです。たとえば、Alice という個人の Subject には、Alice の運転免許証の名前「Alice Bar」が Subject にバインドしている Principal と、学生番号「999-99-9999」が Subject にバインドしている Principal の 2 つがあります。どちらの Principal も、違う名前であっても同じ Subject を参照しています。

また、Subject には、資格として参照されるセキュリティ関連の属性もあります。非公開の暗号化鍵など、特別な保護を必要とする重要な資格は、非公開資格 Set 内に格納されます。公開鍵証明書や Kerberos サーバチケットが公開資格 Set に格納されるように、資格は共有されることを目的としています。異なる資格 Set にアクセスして変更するには、異なるアクセス権が必要となります。

Subject に関連付けられたすべての Principal を取得するには、getPrincipals メソッドを呼び出します。Subject に属する公開または非公開の資格をすべて取得するには、getPublicCredentials メソッドや getPrivateCredentials メソッドを呼び出します。返された Principal と資格の Set を変更するには、Set クラスで定義されているメソッドを使用します。たとえば次のようになります。

	Subject subject;
	Principal principal;
	Object credential;

	// add a Principal and credential to the Subject
	subject.getPrincipals().add(principal);
	subject.getPublicCredentials().add(credential);
 

この Subject クラスは、Serializable を実装します。Subject に関連付けられた Principal は直列化されますが、Subject に関連付けられた資格は直列化されません。java.security.Principal クラスは Serializable を実装していません。そのため、Subject に関連付けられた具体的な Principal 実装はすべて、Serializable を実装する必要があります。

関連項目:
Principal, DomainCombiner, 直列化された形式

コンストラクタの概要
Subject()
          Principal の空の Set と公開資格および非公開資格の空の Set とで、 Subject のインスタンスを作成します。
Subject(boolean readOnly, Set principals, Set pubCredentials, Set privCredentials)
          Principal の指定した Set と資格とで、Subject のインスタンスを作成します。
 
メソッドの概要
static Object doAs(Subject subject, PrivilegedAction action)
          特定の Subject として動作します。
static Object doAs(Subject subject, PrivilegedExceptionAction action)
          特定の Subject として動作します。
static Object doAsPrivileged(Subject subject, PrivilegedAction action, AccessControlContext acc)
          特定の Subject として特権付きで動作します。
static Object doAsPrivileged(Subject subject, PrivilegedExceptionAction action, AccessControlContext acc)
          特定の Subject として特権付きで動作します。
 boolean equals(Object o)
          指定した Object とこの Subject が等しいかどうかを比較します。
 Set getPrincipals()
          この Subject に関連付けられた Principal の Set を返します。
 Set getPrincipals(Class c)
          指定した Class のインスタンスまたはサブクラスである、この Subject に関連付けられた Principal の Set を返します。
 Set getPrivateCredentials()
          この Subject が保持する非公開資格の Set を返します。
 Set getPrivateCredentials(Class c)
          指定した Class のインスタンスまたはサブクラスであるこの Subject に関連した非公開資格の Set を返します。
 Set getPublicCredentials()
          この Subject が保持する公開資格の Set を返します。
 Set getPublicCredentials(Class c)
          指定した Class のインスタンスまたはサブクラスであるこの Subject に関連した公開資格の Set を返します。
static Subject getSubject(AccessControlContext acc)
          指定した AccessControlContext に関連付けられた Subject を取得します。
 int hashCode()
          この Subject のハッシュコードを返します。
 boolean isReadOnly()
          この Subject が読み込み専用であるかどうかを問い合わせます。
 void setReadOnly()
          この Subject を読み込み専用に設定します。
 String toString()
          この Subject の String 表現を返します。
 
クラス java.lang.Object から継承したメソッド
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

コンストラクタの詳細

Subject

public Subject()
Principal の空の Set と公開資格および非公開資格の空の Set とで、 Subject のインスタンスを作成します。

新しく構築した Set では、以降の変更を許可する前に、この Subject が読み込み専用に設定されているかを確認します。新しく作成した Set は、呼び出し側に十分なアクセス権 (たとえば Principal の Set を変更するためには呼び出し側に AuthPermission("modifyPrincipals") がなければならない) があることを保証することで、不正な変更から保護しています。


Subject

public Subject(boolean readOnly,
               Set principals,
               Set pubCredentials,
               Set privCredentials)
Principal の指定した Set と資格とで、Subject のインスタンスを作成します。

指定した Set では、以降の変更を許可する前に、この Subject が読み込み専用に設定されていることを確認する必要があります。指定した Set は、呼び出し側に十分なアクセス権があることを保証することで、不正な変更から保護することも必要です。

パラメータ:
readOnly - Subject が読み込み専用の場合は true、そうでない場合は false

principals - この Subject に関連付ける Principal の Set

pubCredentials - この Subject に関連付ける公開資格の Set

privCredentials - この Subject に関連付ける非公開資格の Set
例外:
NullPointerException - 指定した principalspubCredentialsprivCredentials のどれかが null の場合
メソッドの詳細

setReadOnly

public void setReadOnly()
この Subject を読み込み専用に設定します。

この Subject の PrincipalSet や資格 Set に対する変更 (追加や削除) は許可されません。この Subject の資格に対する destroy 操作だけが許可されます。

その後、Subject の Principal や資格の Set を変更しようとすると、IllegalStateException がスローされます。また、Subject を読み込み専用にした後で、もう一度書き込めるようにリセットすることはできません。

例外:
SecurityException - 呼び出し側に、この Subject を読み込み専用に設定するアクセス権がない場合

isReadOnly

public boolean isReadOnly()
この Subject が読み込み専用であるかどうかを問い合わせます。

戻り値:
この Subject が読み込み専用である場合は true、そうでない場合は false

getSubject

public static Subject getSubject(AccessControlContext acc)
指定した AccessControlContext に関連付けられた Subject を取得します。

AccessControlContext に、多くの Subject が含まれる場合があります (ネストされた doAs 呼び出しによる)。この場合、AccessControlContext に関連付けられた最新の Subject が返されます。

パラメータ:
acc - Subject を取得する AccessControlContext
戻り値:
この AccessControlContext に関連付けられた Subject。この AccessControlContext に関連付けられた Subject がない場合は null
例外:
SecurityException - 呼び出し側に、この Subject を取得するアクセス権がない場合

NullPointerException - 指定した AccessControlContextnull の場合

doAs

public static Object doAs(Subject subject,
                          PrivilegedAction action)
特定の Subject として動作します。

このメソッドでは、最初に現在の Thread の AccessControlContextAccessController.getContext で取得し、取得したコンテキストと (指定した Subject で構築した) 新しい SubjectDomainCombiner を使用して新しい AccessControlContext をインスタンス化します。最後に、AccessController.doPrivileged を呼び出して、指定した PrivilegedAction と新しく構築した AccessControlContext を渡します。

パラメータ:
subject - 指定した action が実行されるときの Subjectnull も可

action - 指定した Subject として実行されるコード

戻り値:
PrivilegedAction の run メソッドによって返される Object
例外:
NullPointerException - PrivilegedActionnull の場合

SecurityException - 呼び出し側に、このメソッドを呼び出すアクセス権がない場合

doAs

public static Object doAs(Subject subject,
                          PrivilegedExceptionAction action)
                   throws PrivilegedActionException
特定の Subject として動作します。

このメソッドでは、最初に現在の Thread の AccessControlContextAccessController.getContext で取得し、取得したコンテキストと (指定した Subject で構築した) 新しい SubjectDomainCombiner を使用して新しい AccessControlContext をインスタンス化します。最後に、AccessController.doPrivileged を呼び出して、指定した PrivilegedExceptionAction と新しく構築した AccessControlContext を渡します。

パラメータ:
subject - 指定した action が実行されるときの Subjectnull も可

action - 指定した Subject として実行されるコード

戻り値:
PrivilegedExceptionAction の run メソッドによって返される Object
例外:
PrivilegedActionException - PrivilegedExceptionAction.run がチェック例外をスローした場合

NullPointerException - 指定した PrivilegedExceptionActionnull の場合

SecurityException - 呼び出し側に、このメソッドを呼び出すアクセス権がない場合

doAsPrivileged

public static Object doAsPrivileged(Subject subject,
                                    PrivilegedAction action,
                                    AccessControlContext acc)
特定の Subject として特権付きで動作します。

このメソッドの動作は、現在の Thread の AccessControlContext を取得する代わりに、指定した AccessControlContext を使用する点を除き、Subject.doAs と同じです。指定した AccessControlContextnull の場合、このメソッドは新しい AccessControlContext を ProtectionDomain の空のコレクションでインスタンス化します。

パラメータ:
subject - 指定した action が実行されるときの Subjectnull も可

action - 指定した Subject として実行されるコード

acc - 指定した subjectaction が結びつけられている AccessControlContext

戻り値:
PrivilegedAction の run メソッドによって返される Object
例外:
NullPointerException - PrivilegedActionnull の場合

SecurityException - 呼び出し側に、このメソッドを呼び出すアクセス権がない場合

doAsPrivileged

public static Object doAsPrivileged(Subject subject,
                                    PrivilegedExceptionAction action,
                                    AccessControlContext acc)
                             throws PrivilegedActionException
特定の Subject として特権付きで動作します。

このメソッドの動作は、現在の Thread の AccessControlContext を取得する代わりに、指定した AccessControlContext を使用する点を除き、Subject.doAs と同じになります。指定した AccessControlContextnull の場合、このメソッドは新しい AccessControlContext を ProtectionDomain の空のコレクションでインスタンス化します。

パラメータ:
subject - 指定した action が実行されるときの Subjectnull も可

action - 指定した Subject として実行されるコード

acc - 指定した subjectaction が結びつけられている AccessControlContext

戻り値:
PrivilegedExceptionAction の run メソッドによって返される Object
例外:
PrivilegedActionException - PrivilegedExceptionAction.run がチェック例外をスローした場合

NullPointerException - 指定した PrivilegedExceptionActionnull の場合

SecurityException - 呼び出し側に、このメソッドを呼び出すアクセス権がない場合

getPrincipals

public Set getPrincipals()
この Subject に関連付けられた Principal の Set を返します。各 Principal は、この Subject の識別情報を表します。

返される Set は、この Subject の内部的な PrincipalSet によって返されます。返された Set に対する変更は、内部の PrincipalSet にも影響します。

戻り値:
この Subject に関連付けられた Principal の Set

getPrincipals

public Set getPrincipals(Class c)
指定した Class のインスタンスまたはサブクラスである、この Subject に関連付けられた Principal の Set を返します。

返される Set は、この Subject の内部的な PrincipalSet によって返されていません。メソッド呼び出しごとに、新しい Set が作成されて返されます。返された Set に対する変更は、内部的な PrincipalSet に影響しません。

パラメータ:
c - 返される Principal の Set は、すべてこのクラスのインスタンスになる
戻り値:
指定した Class のインスタンスである Principal の Set
例外:
NullPointerException - 指定した Classnull の場合

getPublicCredentials

public Set getPublicCredentials()
この Subject が保持する公開資格の Set を返します。

返される Set は、この Subject の内部的な公開 Credential の Set によって返されます。返された Set に対する変更は、内部的な公開 Credential の Set にも影響します。

戻り値:
この Subject が保持する公開資格の Set

getPrivateCredentials

public Set getPrivateCredentials()
この Subject が保持する非公開資格の Set を返します。

返される Set は、この Subject の内部的な非公開 Credential の Set によって返されます。返された Set に対する変更は、内部的な非公開 Credential の Set にも影響します。

呼び出し側では、返される Set の Credential にアクセスするための権限、または Set 自体を変更するためのアクセス権が必要となります。呼び出し側に適切なアクセス権がない場合は、SecurityException がスローされます。

Set を繰り返し処理する際、呼び出し側に特定の Credential に対するアクセス権がない場合は、SecurityException がスローされます。その場合でも、IteratorSet の次の要素に処理を進めます。

戻り値:
この Subject が保持する非公開資格の Set

getPublicCredentials

public Set getPublicCredentials(Class c)
指定した Class のインスタンスまたはサブクラスであるこの Subject に関連した公開資格の Set を返します。

返される Set は、この Subject の内部的な公開 Credential の Set によって返されません。各メソッドの呼び出しに対して、新しい Set が作成されて返されます。返された Set に対する変更は、内部的な公開 Credential の Set に影響しません。

パラメータ:
c - 返される公開資格の Set は、すべてこのクラスのインスタンスになる
戻り値:
指定した Class のインスタンスである公開資格の Set
例外:
NullPointerException - 指定した Classnull の場合

getPrivateCredentials

public Set getPrivateCredentials(Class c)
指定した Class のインスタンスまたはサブクラスであるこの Subject に関連した非公開資格の Set を返します。

呼び出し側には、要求した Credential すべてに対するアクセス権がなければなりません。そうでない場合は、SecurityException がスローされます。

返される Set は、この Subject の内部的な非公開 Credential の Set によって返されません。各メソッドの呼び出しに対して、新しい Set が作成されて返されます。返された Set に対する変更は、内部的な非公開 Credential の Set に影響しません。

パラメータ:
c - 返される非公開 Credential の Set は、すべてこのクラスのインスタンスになる
戻り値:
指定した Class のインスタンスである非公開資格の Set
例外:
NullPointerException - 指定した Classnull の場合

equals

public boolean equals(Object o)
指定した Object とこの Subject が等しいかどうかを比較します。指定したオブジェクトが Subject であり、2 つの Subject インスタンスが等価である場合に true を返します。より正確には、Principal の Set と Credential の Set が等しい場合に、2 つの Subject インスタンスは等しくなります。

オーバーライド:
クラス Object 内の equals
パラメータ:
o - この Subject と等しいかどうかを比較する Object
戻り値:
指定された Object がこの Subject と等しい場合は true
例外:
SecurityException - 呼び出し側にこの Subject の非公開資格へのアクセス権がない場合、あるいは、呼び出し側に指定した Subject の非公開資格へのアクセス権がない場合
関連項目:
Object.hashCode(), Hashtable

toString

public String toString()
この Subject の String 表現を返します。

オーバーライド:
クラス Object 内の toString
戻り値:
この Subject の String 表現

hashCode

public int hashCode()
この Subject のハッシュコードを返します。

オーバーライド:
クラス Object 内の hashCode
戻り値:
この Subject のハッシュコード
例外:
SecurityException - 呼び出し側にこの Subject の非公開資格へのアクセス権がない場合
関連項目:
Object.equals(java.lang.Object), Hashtable

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.