- すべての実装されたインタフェース:
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
を実装する必要があります。
- 導入されたバージョン:
- 1.4
- 関連項目:
-
コンストラクタのサマリー
コンストラクタ -
メソッドのサマリー
修飾子と型メソッド説明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) 削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドは、非推奨であり、今後のリリースで削除される可能性があります。「セキュリティ・マネージャ」と組み合わせて使用すると便利です。static <T> T
doAsPrivileged
(Subject subject, PrivilegedExceptionAction<T> action, AccessControlContext acc) 削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドは、非推奨であり、今後のリリースで削除される可能性があります。「セキュリティ・マネージャ」と組み合わせて使用すると便利です。boolean
指定されたObjectがこのSubject
と同じかどうかを比較します。このSubject
に関連付けられたPrincipalのSet
を返します。getPrincipals
(Class<T> c) 指定したClass
のインスタンスまたはサブクラスである、このSubject
に関連付けられたPrincipalのSet
を返します。このSubject
が保持する非公開資格のSet
を返します。<T> Set<T>
getPrivateCredentials
(Class<T> c) 指定したClass
のインスタンスまたはサブクラスであるこのSubject
に関連付けられた非公開資格のSet
を返します。このSubject
が保持する公開資格のSet
を返します。<T> Set<T>
getPublicCredentials
(Class<T> c) 指定したClass
のインスタンスまたはサブクラスであるこのSubject
に関連付けられた公開資格のSet
を返します。static Subject
削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドはAccessControlContext
に依存し、「セキュリティ・マネージャ」とともに非推奨となり、今後のリリースで削除される可能性があります。int
hashCode()
このSubject
のハッシュ・コードを返します。boolean
このSubject
が読取り専用であるかどうかを問い合わせます。void
このSubject
を読取り専用に設定します。toString()
このSubject
の文字列表現を返します。
-
コンストラクタの詳細
-
Subject
public Subject()空のPrincipalのSet
と空の公開資格および非公開資格のSetとで、Subject
のインスタンスを作成します。新しく作成されたSetでは、以降の変更を許可する前に、この
Subject
が読取り専用に設定されているかどうかを確認する必要があります。 新しく作成されたSetは、呼出し側に十分なアクセス権があることを確認することによって、不正な変更を予防します。 これらのセットはヌル要素も禁止し、ヌル要素の追加または問合せを試みるとNullPointerException
になります。Principals Setを変更するには、呼出し側に
AuthPermission("modifyPrincipals")
が必要です。 公開資格Setを変更するには、呼出し側にAuthPermission("modifyPublicCredentials")
が必要です。 非公開資格Setを変更するには、呼出し側にAuthPermission("modifyPrivateCredentials")
が必要です。 -
Subject
public Subject(boolean readOnly, Set<? extends Principal> principals, Set<?> pubCredentials, Set<?> privCredentials) Principalと資格を指定して、Subject
のインスタンスを作成します。Principalと資格は、指定されたSetから新しく作成されたSetへコピーされます。 これらの新しく作成されたSetでは、以降の変更を許可する前に、この
Subject
が読取り専用に設定されているかどうかを確認する必要があります。 新しく作成されたSetは、呼出し側に十分なアクセス権があることを確認することによって、不正な変更を予防します。 これらのセットはヌル要素も禁止し、ヌル要素の追加または問合せを試みるとNullPointerException
になります。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
であるか、これらの3つのセットのいずれかにヌル値が存在する場合。
-
-
メソッドの詳細
-
setReadOnly
public void setReadOnly()このSubject
を読取り専用に設定します。このSubjectの
Principal
Set
および資格Setに対する変更(追加や削除)は許可されません。 このSubjectの資格に対するdestroy
操作だけが許可されます。その後、Subjectの
Principal
や資格のSetを変更しようとすると、IllegalStateException
がスローされます。 また、Subject
を読取り専用にしたあとで、再度書込み可能にリセットすることはできません。- 例外:
SecurityException
- セキュリティ・マネージャがインストールされていて、呼び出し元にこのSubject
を読み取り専用に設定するためのAuthPermission("setReadOnly")
権限がない場合。
-
isReadOnly
public boolean isReadOnly()このSubject
が読取り専用であるかどうかを問い合わせます。- 戻り値:
- この
Subject
が読取り専用である場合はtrue、そうでない場合はfalse。
-
getSubject
@Deprecated(since="17", forRemoval=true) public static Subject getSubject(AccessControlContext acc) 削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドはAccessControlContext
に依存し、「セキュリティ・マネージャ」とともに非推奨となり、今後のリリースで削除される可能性があります。 ただし、サブジェクトの取得はセキュリティ・マネージャに依存しないため、このメソッドの置換は、将来のリリースで追加される可能性があります。指定したAccessControlContext
に関連付けられたSubject
を取得します。AccessControlContext
に、多くのSubjectが含まれる場合があります(入れ子にされたdoAs
呼び出しからの)。 この場合、AccessControlContext
に関連付けられた最新のSubject
が返されます。- パラメータ:
acc
-Subject
を取得するAccessControlContext
。- 戻り値:
- 提供された
AccessControlContext
に関連付けられているSubject
。提供されたAccessControlContext
に関連付けられているSubject
が存在しない場合はnull
。 - 例外:
SecurityException
- セキュリティ・マネージャがインストールされていて、呼び出し元にSubject
を取得するためのAuthPermission("getSubject")
許可がない場合。NullPointerException
- 指定されたAccessControlContext
がnull
である場合。
-
doAs
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
として実行されるコード。- 戻り値:
- PrivilegedActionの
run
メソッドによって返される値。 - 例外:
NullPointerException
-PrivilegedAction
がnull
である場合。SecurityException
- セキュリティ・マネージャがインストールされ、呼び出し元にこのメソッドを呼び出すためのAuthPermission("doAs")
パーミッションがない場合。
-
doAs
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
として実行されるコード。- 戻り値:
- PrivilegedExceptionActionの
run
メソッドによって返される値。 - 例外:
PrivilegedActionException
-PrivilegedExceptionAction.run
メソッドがチェック例外をスローした場合。NullPointerException
- 指定されたPrivilegedExceptionAction
がnull
である場合。SecurityException
- セキュリティ・マネージャがインストールされ、呼び出し元にこのメソッドを呼び出すためのAuthPermission("doAs")
パーミッションがない場合。
-
doAsPrivileged
@Deprecated(since="17", forRemoval=true) public static <T> T doAsPrivileged(Subject subject, PrivilegedAction<T> action, AccessControlContext acc) 削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドは、非推奨であり、今後のリリースで削除される可能性があります。「セキュリティ・マネージャ」と組み合わせて使用すると便利です。 そのため、このメソッドは非推奨であり、削除される可能性があります。 Security Managerまたはこのメソッドに置換はありません。特定のSubject
として特権付きで動作します。このメソッドの動作は、現在のThreadの
AccessControlContext
を取得する代わりに、指定したAccessControlContext
を使用する点を除き、Subject.doAs
と同じになります。 指定されたAccessControlContext
がnull
の場合、このメソッドはProtectionDomainの空のコレクションを使用して、新規AccessControlContext
をインスタンス化します。- 型パラメータ:
T
- PrivilegedActionのrun
メソッドから返される値の型。- パラメータ:
subject
- 指定したaction
が実行されるときのSubject
。 このパラメータはnull
になる可能性がある。action
- 指定したSubject
として実行されるコード。acc
- 指定したsubjectとactionが結びつけられているAccessControlContext
。- 戻り値:
- PrivilegedActionの
run
メソッドによって返される値。 - 例外:
NullPointerException
-PrivilegedAction
がnull
である場合。SecurityException
- セキュリティ・マネージャがインストールされていて、呼び出し元にこのメソッドを呼び出すためのAuthPermission("doAsPrivileged")
権限がない場合。
-
doAsPrivileged
@Deprecated(since="17", forRemoval=true) public static <T> T doAsPrivileged(Subject subject, PrivilegedExceptionAction<T> action, AccessControlContext acc) throws PrivilegedActionException 削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドは、非推奨であり、今後のリリースで削除される可能性があります。「セキュリティ・マネージャ」と組み合わせて使用すると便利です。 そのため、このメソッドは非推奨であり、削除される可能性があります。 Security Managerまたはこのメソッドに置換はありません。特定のSubject
として特権付きで動作します。このメソッドの動作は、現在のThreadの
AccessControlContext
を取得する代わりに、指定したAccessControlContext
を使用する点を除き、Subject.doAs
と同じになります。 指定されたAccessControlContext
がnull
の場合、このメソッドはProtectionDomainの空のコレクションを使用して、新規AccessControlContext
をインスタンス化します。- 型パラメータ:
T
- PrivilegedExceptionActionのrun
メソッドから返される値の型。- パラメータ:
subject
- 指定したaction
が実行されるときのSubject
。 このパラメータはnull
になる可能性がある。action
- 指定したSubject
として実行されるコード。acc
- 指定したsubjectとactionが結びつけられているAccessControlContext
。- 戻り値:
- PrivilegedExceptionActionの
run
メソッドによって返される値。 - 例外:
PrivilegedActionException
-PrivilegedExceptionAction.run
メソッドがチェック例外をスローした場合。NullPointerException
- 指定されたPrivilegedExceptionAction
がnull
である場合。SecurityException
- セキュリティ・マネージャがインストールされていて、呼び出し元にこのメソッドを呼び出すためのAuthPermission("doAsPrivileged")
権限がない場合。
-
getPrincipals
このSubject
に関連付けられたPrincipalのSet
を返します。 各Principal
は、このSubject
の識別情報を表します。返される
Set
は、このSubjectの内部的なPrincipal
Set
に基づいています。 返されたSet
に対する変更は、内部のPrincipal
Set
にも反映されます。セキュリティ・マネージャがインストールされている場合、呼び出し元は返されたセットを変更するための
AuthPermission("modifyPrincipals")
パーミッションを持たなければなりません。そうしないとSecurityException
がスローされます。- 戻り値:
- この
Subject
に関連付けられたPrincipalのSet
。
-
getPrincipals
指定したClass
のインスタンスまたはサブクラスである、このSubject
に関連付けられたPrincipalのSet
を返します。返される
Set
は、このSubjectの内部的なPrincipal
Set
に基づいていません。 各メソッドの呼出しに対して、新しいSet
が作成されて返されます。 返されたSet
に対する変更は、内部的なPrincipal
Set
には反映されません。- 型パラメータ:
T
-c
でモデル化されるクラスの型- パラメータ:
c
- 返されるプリンシパルのSet
はすべて、このクラスのインスタンスになる。- 戻り値:
- 指定した
Class
のインスタンスであるPrincipalのSet
。 - 例外:
NullPointerException
- 指定されたClass
がnull
である場合。
-
getPublicCredentials
このSubject
が保持する公開資格のSet
を返します。返される
Set
は、このSubjectの内部的な公開資格Set
に基づいています。 返されたSet
に対する変更は、内部の公開資格Set
にも反映されます。セキュリティ・マネージャがインストールされている場合、呼び出し元は返されたセットを変更するための
AuthPermission("modifyPublicCredentials")
パーミッションを持たなければなりません。そうしないとSecurityException
がスローされます。- 戻り値:
- この
Subject
が保持する公開資格証明のSet
。
-
getPrivateCredentials
このSubject
が保持する非公開資格のSet
を返します。返される
Set
は、このSubjectの内部的な非公開資格Set
に基づいています。 返されたSet
に対する変更は、内部の非公開資格Set
にも反映されます。セキュリティ・マネージャがインストールされている場合、呼び出し元は返されたセットを変更するための
AuthPermission("modifyPrivateCredentials")
パーミッションを持たなければなりません。そうしないとSecurityException
がスローされます。Set
を反復処理しているときに、セキュリティ・マネージャがインストールされていて、呼び出し元に特定の資格証明にアクセスするためのPrivateCredentialPermission
がない場合は、SecurityException
がスローされます。 それにもかかわらず、Iterator
はSet
の次の要素に進められます。- 戻り値:
- この
Subject
が保持するプライベート資格証明のSet
。
-
getPublicCredentials
指定したClass
のインスタンスまたはサブクラスであるこのSubject
に関連付けられた公開資格のSet
を返します。返される
Set
は、このSubjectの内部的な公開資格Set
に基づいていません。 各メソッドの呼出しに対して、新しいSet
が作成されて返されます。 返されたSet
に対する変更は、内部的な公開資格Set
には反映されません。- 型パラメータ:
T
-c
でモデル化されるクラスの型- パラメータ:
c
- 返される公開資格のSet
はすべて、このクラスのインスタンスになる。- 戻り値:
- 指定した
Class
のインスタンスである公開資格のSet
。 - 例外:
NullPointerException
- 指定されたClass
がnull
である場合。
-
getPrivateCredentials
指定したClass
のインスタンスまたはサブクラスであるこのSubject
に関連付けられた非公開資格のSet
を返します。セキュリティ・マネージャがインストールされている場合、呼び出し側はリクエストされたすべての資格証明にアクセスするために
PrivateCredentialPermission
を持っていなければなりません。そうしないとSecurityException
がスローされます。返される
Set
は、このSubjectの内部的な非公開資格Set
に基づいていません。 各メソッドの呼出しに対して、新しいSet
が作成されて返されます。 返されたSet
に対する変更は、内部的な非公開資格Set
には反映されません。- 型パラメータ:
T
-c
でモデル化されるクラスの型- パラメータ:
c
- 返される非公開資格のSet
はすべて、このクラスのインスタンスになる。- 戻り値:
- 指定した
Class
のインスタンスである非公開資格のSet
。 - 例外:
NullPointerException
- 指定されたClass
がnull
である場合。
-
equals
public boolean equals(Object o) 指定されたObjectがこのSubject
と同じかどうかを比較します。 指定されたオブジェクトもSubjectであり、2つのSubject
インスタンスが等価である場合、trueを返します。 より正確には、Principal
のSetとCredential
のSetが等しい場合に、2つのSubject
インスタンスは等しくなります。- オーバーライド:
equals
、クラスObject
- パラメータ:
o
- このSubject
と等しいかどうかを比較するオブジェクト。- 戻り値:
- 指定されたObjectがこの
Subject
と等しい場合はtrue。 - 例外:
SecurityException
- セキュリティ・マネージャがインストールされていて、呼び出し元にこのSubject
または提供されているSubject
のプライベート資格証明にアクセスするためのPrivateCredentialPermission
権限がない場合。- 関連項目:
-
toString
public String toString()このSubject
の文字列表現を返します。 -
hashCode
public int hashCode()このSubject
のハッシュ・コードを返します。- オーバーライド:
hashCode
、クラスObject
- 戻り値:
- この
Subject
のハッシュ・コード。 - 例外:
SecurityException
- セキュリティ・マネージャがインストールされていて、呼び出し側にこのSubjectプライベート資格証明にアクセスするためのPrivateCredentialPermission
アクセス権がない場合。- 関連項目:
-