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
、クラス: Object
o
- このSubject
と等しいかどうかを比較するオブジェクト。Subject
と等しい場合はtrue。SecurityException
- 呼出し側にこのSubject
の非公開資格へのアクセス権がない場合、または呼出し側に指定されたSubject
の非公開資格へのアクセス権がない場合。Object.hashCode()
、HashMap
public String toString()
Subject
の文字列表現を返します。
public int hashCode()
Subject
のハッシュ・コードを返します。
hashCode
、クラス: Object
Subject
のハッシュ・コード。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.