public final class Subject extends Object implements Serializable
Subjectは、個人などの単一エンティティに関する関連情報をグループ化したものです。この種の情報には、Subjectの識別情報や、セキュリティ関連の属性(パスワードや暗号化鍵など)が含まれます。
Subjectは、複数の識別情報を持つ場合があります。それぞれの識別情報は、Subject内のPrincipalとして表されます。Principalは単に名前をSubjectにバインドしたものです。たとえば、Aliceという個人のSubjectには、2つのPrincipalがあります。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<? extends Principal> principals, Set<?> pubCredentials, Set<?> privCredentials)
Principalと資格を指定して、
Subjectのインスタンスを作成します。 |
| 修飾子と型 | メソッドと説明 |
|---|---|
static <T> T |
doAs(Subject subject, PrivilegedAction<T> action)
特定の
Subjectとして動作します。 |
static <T> T |
doAs(Subject subject, PrivilegedExceptionAction<T> action)
特定の
Subjectとして動作します。 |
static <T> T |
doAsPrivileged(Subject subject, PrivilegedAction<T> action, AccessControlContext acc)
特定の
Subjectとして特権付きで動作します。 |
static <T> T |
doAsPrivileged(Subject subject, PrivilegedExceptionAction<T> action, AccessControlContext acc)
特定の
Subjectとして特権付きで動作します。 |
boolean |
equals(Object o)
指定されたObjectがこの
Subjectと同じかどうかを比較します。 |
Set<Principal> |
getPrincipals()
この
Subjectに関連付けられたPrincipalのSetを返します。 |
<T extends Principal> |
getPrincipals(Class<T> c)
指定した
Classのインスタンスまたはサブクラスである、このSubjectに関連付けられたPrincipalのSetを返します。 |
Set<Object> |
getPrivateCredentials()
この
Subjectが保持する非公開資格のSetを返します。 |
<T> Set<T> |
getPrivateCredentials(Class<T> c)
指定した
ClassのインスタンスまたはサブクラスであるこのSubjectに関連付けられた非公開資格のSetを返します。 |
Set<Object> |
getPublicCredentials()
この
Subjectが保持する公開資格のSetを返します。 |
<T> Set<T> |
getPublicCredentials(Class<T> c)
指定した
ClassのインスタンスまたはサブクラスであるこのSubjectに関連付けられた公開資格のSetを返します。 |
static Subject |
getSubject(AccessControlContext acc)
指定した
AccessControlContextに関連付けられたSubjectを取得します。 |
int |
hashCode()
この
Subjectのハッシュ・コードを返します。 |
boolean |
isReadOnly()
この
Subjectが読取り専用であるかどうかを問い合わせます。 |
void |
setReadOnly()
この
Subjectを読取り専用に設定します。 |
String |
toString()
この
Subjectの文字列表現を返します。 |
public Subject()
Setと空の公開資格および非公開資格のSetとで、Subjectのインスタンスを作成します。
新しく作成されたSetでは、以降の変更を許可する前に、このSubjectが読取り専用に設定されているかどうかを確認する必要があります。新しく作成されたSetは、呼出し側に十分なアクセス権があることを確認することによって、不正な変更を予防します。
Principals Setを変更するには、呼出し側にAuthPermission("modifyPrincipals")が必要です。公開資格Setを変更するには、呼出し側にAuthPermission("modifyPublicCredentials")が必要です。非公開資格Setを変更するには、呼出し側にAuthPermission("modifyPrivateCredentials")が必要です。
public Subject(boolean readOnly,
Set<? extends Principal> principals,
Set<?> pubCredentials,
Set<?> privCredentials)
Subjectのインスタンスを作成します。
Principalと資格は、指定されたSetから新しく作成されたSetへコピーされます。これらの新しく作成されたSetでは、以降の変更を許可する前に、このSubjectが読取り専用に設定されているかどうかを確認する必要があります。新しく作成されたSetは、呼出し側に十分なアクセス権があることを確認することによって、不正な変更を予防します。
Principals Setを変更するには、呼出し側にAuthPermission("modifyPrincipals")が必要です。公開資格Setを変更するには、呼出し側にAuthPermission("modifyPublicCredentials")が必要です。非公開資格Setを変更するには、呼出し側にAuthPermission("modifyPrivateCredentials")が必要です。
readOnly - Subjectが読取り専用の場合はtrue、そうでない場合はfalse。 principals - このSubjectに関連付けるPrincipalのSet。 pubCredentials - このSubjectに関連付ける公開資格のSet。 privCredentials - このSubjectに関連付ける非公開資格のSet。NullPointerException - 指定されたprincipals、pubCredentials、またはprivCredentialsがnullの場合。public void setReadOnly()
Subjectを読取り専用に設定します。
このSubjectのPrincipal Setおよび資格Setに対する変更(追加や削除)は許可されません。このSubjectの資格に対するdestroy操作だけが許可されます。
その後、SubjectのPrincipalや資格のSetを変更しようとすると、IllegalStateExceptionがスローされます。また、Subjectを読取り専用にしたあとで、再度書込み可能にリセットすることはできません。
SecurityException - 呼出し側に、このSubjectを読取り専用に設定するアクセス権がない場合。public boolean isReadOnly()
Subjectが読取り専用であるかどうかを問い合わせます。
Subjectが読取り専用である場合はtrue、そうでない場合はfalse。public static Subject getSubject(AccessControlContext acc)
AccessControlContextに関連付けられたSubjectを取得します。
AccessControlContextに、多くのSubjectが含まれる場合があります(入れ子にされたdoAs呼び出しからの)。この場合、AccessControlContextに関連付けられた最新のSubjectが返されます。
acc - Subjectを取得するAccessControlContext。AccessControlContextに関連付けられているSubject。提供されたAccessControlContextに関連付けられているSubjectが存在しない場合はnull。SecurityException - 呼出し側に、Subjectを取得するアクセス権がない場合。 NullPointerException - 指定されたAccessControlContextがnullである場合。public static <T> T doAs(Subject subject, PrivilegedAction<T> action)
Subjectとして動作します。
このメソッドでは、最初に現在のThreadのAccessControlContextをAccessController.getContextで取得し、取得したコンテキストと(指定したSubjectで構築した)新しいSubjectDomainCombinerを使用して新しいAccessControlContextをインスタンス化します。最後に、AccessController.doPrivilegedを呼び出して、指定したPrivilegedActionと新しく構築したAccessControlContextを渡します。
T - PrivilegedActionのrunメソッドから返される値の型。subject - 指定したactionが実行されるときのSubject。このパラメータはnullになる可能性がある。 action - 指定したSubjectとして実行されるコード。 runメソッドによって返される値。NullPointerException - PrivilegedActionがnullである場合。 SecurityException - 呼出し側に、このメソッドを呼び出すアクセス権がない場合。public static <T> T doAs(Subject subject, PrivilegedExceptionAction<T> action) throws PrivilegedActionException
Subjectとして動作します。
このメソッドでは、最初に現在のThreadのAccessControlContextをAccessController.getContextで取得し、取得したコンテキストと(指定したSubjectで構築した)新しいSubjectDomainCombinerを使用して新しいAccessControlContextをインスタンス化します。最後に、AccessController.doPrivilegedを呼び出して、指定したPrivilegedExceptionActionと新しく構築したAccessControlContextを渡します。
T - PrivilegedExceptionActionのrunメソッドから返される値の型。subject - 指定したactionが実行されるときのSubject。このパラメータはnullになる可能性がある。 action - 指定したSubjectとして実行されるコード。 runメソッドによって返される値。PrivilegedActionException - PrivilegedExceptionAction.runメソッドがチェック例外をスローした場合。 NullPointerException - 指定されたPrivilegedExceptionActionがnullである場合。 SecurityException - 呼出し側に、このメソッドを呼び出すアクセス権がない場合。public static <T> T doAsPrivileged(Subject subject, PrivilegedAction<T> action, AccessControlContext acc)
Subjectとして特権付きで動作します。
このメソッドの動作は、現在のThreadのAccessControlContextを取得する代わりに、指定したAccessControlContextを使用する点を除き、Subject.doAsと同じになります。指定されたAccessControlContextがnullの場合、このメソッドはProtectionDomainの空のコレクションを使用して、新規AccessControlContextをインスタンス化します。
T - PrivilegedActionのrunメソッドから返される値の型。subject - 指定したactionが実行されるときのSubject。このパラメータはnullになる可能性がある。 action - 指定したSubjectとして実行されるコード。 acc - 指定したsubjectとactionが結びつけられているAccessControlContext。 runメソッドによって返される値。NullPointerException - PrivilegedActionがnullである場合。 SecurityException - 呼出し側に、このメソッドを呼び出すアクセス権がない場合。public static <T> T doAsPrivileged(Subject subject, PrivilegedExceptionAction<T> action, AccessControlContext acc) throws PrivilegedActionException
Subjectとして特権付きで動作します。
このメソッドの動作は、現在のThreadのAccessControlContextを取得する代わりに、指定したAccessControlContextを使用する点を除き、Subject.doAsと同じになります。指定されたAccessControlContextがnullの場合、このメソッドはProtectionDomainの空のコレクションを使用して、新規AccessControlContextをインスタンス化します。
T - PrivilegedExceptionActionのrunメソッドから返される値の型。subject - 指定したactionが実行されるときのSubject。このパラメータはnullになる可能性がある。 action - 指定したSubjectとして実行されるコード。 acc - 指定したsubjectとactionが結びつけられているAccessControlContext。 runメソッドによって返される値。PrivilegedActionException - PrivilegedExceptionAction.runメソッドがチェック例外をスローした場合。 NullPointerException - 指定されたPrivilegedExceptionActionがnullである場合。 SecurityException - 呼出し側に、このメソッドを呼び出すアクセス権がない場合。public Set<Principal> getPrincipals()
Subjectに関連付けられたPrincipalのSetを返します。各Principalは、このSubjectの識別情報を表します。
返されるSetは、このSubjectの内部的なPrincipal Setに基づいています。返されたSetに対する変更は、内部のPrincipal Setにも反映されます。
Subjectに関連付けられたPrincipalのSet。public <T extends Principal> Set<T> getPrincipals(Class<T> c)
Classのインスタンスまたはサブクラスである、このSubjectに関連付けられたPrincipalのSetを返します。
返されるSetは、このSubjectの内部的なPrincipal Setに基づいていません。各メソッドの呼出しに対して、新しいSetが作成されて返されます。返されたSetに対する変更は、内部的なPrincipal Setには反映されません。
T - cでモデル化されるクラスの型c - 返されるプリンシパルのSetはすべて、このクラスのインスタンスになる。ClassのインスタンスであるPrincipalのSet。NullPointerException - 指定されたClassがnullである場合。public Set<Object> getPublicCredentials()
Subjectが保持する公開資格のSetを返します。
返されるSetは、このSubjectの内部的な公開資格Setに基づいています。返されたSetに対する変更は、内部の公開資格Setにも反映されます。
Subjectが保持する公開資格のSet。public Set<Object> getPrivateCredentials()
Subjectが保持する非公開資格のSetを返します。
返されるSetは、このSubjectの内部的な非公開資格Setに基づいています。返されたSetに対する変更は、内部の非公開資格Setにも反映されます。
呼出し側では、返されるSetのCredentialに対するアクセス権、またはSet自体を変更するためのアクセス権が必要となります。呼出し側に適切なアクセス権がない場合は、SecurityExceptionがスローされます。
Setを繰返し処理する際、呼出し側に特定のCredentialに対するアクセス権がないと、SecurityExceptionがスローされます。その場合でも、IteratorはSetの次の要素に処理を進めます。
Subjectが保持する非公開資格のSet。public <T> Set<T> getPublicCredentials(Class<T> c)
ClassのインスタンスまたはサブクラスであるこのSubjectに関連付けられた公開資格のSetを返します。
返されるSetは、このSubjectの内部的な公開資格Setに基づいていません。各メソッドの呼出しに対して、新しいSetが作成されて返されます。返されたSetに対する変更は、内部的な公開資格Setには反映されません。
T - cでモデル化されるクラスの型c - 返される公開資格のSetはすべて、このクラスのインスタンスになる。Classのインスタンスである公開資格のSet。NullPointerException - 指定されたClassがnullである場合。public <T> Set<T> getPrivateCredentials(Class<T> c)
ClassのインスタンスまたはサブクラスであるこのSubjectに関連付けられた非公開資格のSetを返します。
呼出し側には、要求したCredentialすべてに対するアクセス権がなければなりません。そうでない場合は、SecurityExceptionがスローされます。
返されるSetは、このSubjectの内部的な非公開資格Setに基づいていません。各メソッドの呼出しに対して、新しいSetが作成されて返されます。返されたSetに対する変更は、内部的な非公開資格Setには反映されません。
T - cでモデル化されるクラスの型c - 返される非公開資格のSetはすべて、このクラスのインスタンスになる。Classのインスタンスである非公開資格のSet。NullPointerException - 指定されたClassがnullである場合。public boolean equals(Object o)
Subjectと同じかどうかを比較します。指定されたオブジェクトもSubjectであり、2つのSubjectインスタンスが等価である場合、trueを返します。より正確には、PrincipalのSetとCredentialのSetが等しい場合に、2つのSubjectインスタンスは等しくなります。
equals、クラス: Objecto - このSubjectと等しいかどうかを比較するオブジェクト。Subjectと等しい場合はtrue。SecurityException - 呼出し側にこのSubjectの非公開資格へのアクセス権がない場合、または呼出し側に指定されたSubjectの非公開資格へのアクセス権がない場合。Object.hashCode()、HashMappublic String toString()
Subjectの文字列表現を返します。
public int hashCode()
Subjectのハッシュ・コードを返します。
hashCode、クラス: ObjectSubjectのハッシュ・コード。SecurityException - 呼出し側にこのSubjectの非公開資格へのアクセス権がない場合。Object.equals(java.lang.Object), System.identityHashCode(java.lang.Object) バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.