モジュール java.base
パッケージ 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には、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
関連項目:
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ
    説明
    空のPrincipalのSetと空の公開資格および非公開資格のSetとで、Subjectのインスタンスを作成します。
    Subject(boolean readOnly, Set<? extends Principal> principals, Set<?> pubCredentials, Set<?> privCredentials)
    Principalと資格を指定して、Subjectのインスタンスを作成します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    static <T> T
    callAs(Subject subject, Callable<T> action)
    現在のサブジェクトとしてsubjectを指定してCallableを実行します。
    static Subject
    現在の件名を返します。
    static <T> T
    doAs(Subject subject, PrivilegedAction<T> action)
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    このメソッドはAccessControlContextに依存し、「セキュリティ・マネージャ」とともに非推奨となり、今後のリリースで削除される可能性があります。
    static <T> T
    doAs(Subject subject, PrivilegedExceptionAction<T> action)
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    このメソッドはAccessControlContextに依存し、「セキュリティ・マネージャ」とともに非推奨となり、今後のリリースで削除される可能性があります。
    static <T> T
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    このメソッドは、非推奨であり、今後のリリースで削除される可能性があります。「セキュリティ・マネージャ」と組み合わせて使用すると便利です。
    static <T> T
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    このメソッドは、非推奨であり、今後のリリースで削除される可能性があります。「セキュリティ・マネージャ」と組み合わせて使用すると便利です。
    boolean
    指定されたObjectがこのSubjectと同じかどうかを比較します。
    このSubjectに関連付けられたPrincipalのSetを返します。
    <T extends Principal>
    Set<T>
    指定したClassのインスタンスまたはサブクラスである、このSubjectに関連付けられたPrincipalのSetを返します。
    このSubjectが保持する非公開資格のSetを返します。
    <T> Set<T>
    指定したClassのインスタンスまたはサブクラスであるこのSubjectに関連付けられた非公開資格のSetを返します。
    このSubjectが保持する公開資格のSetを返します。
    <T> Set<T>
    指定したClassのインスタンスまたはサブクラスであるこのSubjectに関連付けられた公開資格のSetを返します。
    static Subject
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    このメソッドはAccessControlContextに依存し、「セキュリティ・マネージャ」とともに非推奨となり、今後のリリースで削除される可能性があります。
    int
    このSubjectのハッシュ・コードを返します。
    boolean
    このSubjectが読取り専用であるかどうかを問い合わせます。
    void
    このSubjectを読取り専用に設定します。
    このSubjectの文字列表現を返します。

    クラス java.lang.Objectで宣言されたメソッド

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • コンストラクタの詳細

    • 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 - 指定されたprincipalspubCredentials、またはprivCredentialsnullであるか、これらの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に依存し、「セキュリティ・マネージャ」とともに非推奨となり、今後のリリースで削除される可能性があります。 ただし、サブジェクトの取得は、セキュリティ・マネージャとは無関係に役立ちます。 したがって、current()という名前の置換APIが追加され、現在のサブジェクトの取得に使用できます。
      指定したAccessControlContextに関連付けられたSubjectを取得します。

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

      パラメータ:
      acc - Subjectを取得するAccessControlContext
      戻り値:
      提供されたAccessControlContextに関連付けられているSubject。提供されたAccessControlContextに関連付けられているSubjectが存在しない場合はnull
      例外:
      SecurityException - セキュリティ・マネージャがインストールされていて、呼び出し元にSubjectを取得するためのAuthPermission("getSubject")許可がない場合。
      NullPointerException - 指定されたAccessControlContextnullである場合。
    • current

      public static Subject current()
      現在の件名を返します。

      現在のサブジェクトは、callAs(javax.security.auth.Subject, java.util.concurrent.Callable<T>)メソッドによってインストールされます。 callAs(subject, action)がコールされると、actionが現在のサブジェクトとして実行され、このメソッドで取得できます。 actionが終了すると、現在のサブジェクトは以前の値にリセットされます。 現在のサブジェクトは、callAs()の最初のコールの前にnullになります。

      新しいスレッドが作成されると、その現在のサブジェクトはその親スレッドのサブジェクトと同じであり、親スレッドの現在のサブジェクトが別の値に変更された場合でも変更されません。

      実装上のノート:
      このメソッドは、Subject.getSubject(AccessController.getContext())と同じ値を返します。 これにより、AccessControlContextにサブジェクトをインストールするdoAsをまだコールしている可能性があるコードとの互換性が保持されます。 この動作は、将来のバージョンで変更される可能性があります。
      戻り値:
      現在のサブジェクト(現在のサブジェクトがインストールされていない場合、または現在のサブジェクトがnullに設定されている場合)。
      導入されたバージョン:
      18
      関連項目:
    • callAs

      public static <T> T callAs(Subject subject, Callable<T> action) throws CompletionException
      現在のサブジェクトとしてsubjectを指定してCallableを実行します。
      実装上のノート:
      このメソッドは、サブジェクトを新しいAccessControlContextに格納するSubject.doAs(subject, altAction)をコールします。altAction.run()action.call()に相当し、スローされた例外はこのメソッドの指定と一致するように変更されます。 これにより、AccessControlContextからサブジェクトを取得するgetSubject(AccessControlContext)をコールしている可能性があるコードとの互換性が維持されます。 この動作は、将来のバージョンで変更される可能性があります。
      型パラメータ:
      T - actioncallメソッドによって返される値のタイプ
      パラメータ:
      subject - 指定したactionが実行されるときのSubject このパラメータはnullになる可能性がある。
      action - 現在のサブジェクトとしてsubjectで実行するコード。 nullにはできません。
      戻り値:
      actioncallメソッドによって返される値
      例外:
      NullPointerException - actionnullの場合
      CompletionException - action.call()が例外をスローした場合。 CompletionExceptionの原因は、action.call()によってスローされる例外に設定されます。
      導入されたバージョン:
      18
      関連項目:
    • doAs

      @Deprecated(since="18", forRemoval=true) public static <T> T doAs(Subject subject, PrivilegedAction<T> action)
      削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
      このメソッドはAccessControlContextに依存し、「セキュリティ・マネージャ」とともに非推奨となり、今後のリリースで削除される可能性があります。 ただし、サブジェクトとして作業を実行することは、セキュリティ・マネージャとは無関係に役立ちます。 したがって、callAs(javax.security.auth.Subject, java.util.concurrent.Callable<T>)という名前の置換APIが追加され、同じ作業を実行するために使用できます。
      特定のSubjectとして動作します。

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

      型パラメータ:
      T - PrivilegedActionのrunメソッドから返される値の型。
      パラメータ:
      subject - 指定したactionが実行されるときのSubject このパラメータはnullになる可能性がある。
      action - 指定したSubjectとして実行されるコード。
      戻り値:
      PrivilegedActionのrunメソッドによって返される値。
      例外:
      NullPointerException - PrivilegedActionnullである場合。
      SecurityException - セキュリティ・マネージャがインストールされ、呼び出し元にこのメソッドを呼び出すためのAuthPermission("doAs")パーミッションがない場合。
    • doAs

      @Deprecated(since="18", forRemoval=true) public static <T> T doAs(Subject subject, PrivilegedExceptionAction<T> action) throws PrivilegedActionException
      削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
      このメソッドはAccessControlContextに依存し、「セキュリティ・マネージャ」とともに非推奨となり、今後のリリースで削除される可能性があります。 ただし、サブジェクトとして作業を実行することは、セキュリティ・マネージャとは無関係に役立ちます。 したがって、callAs(javax.security.auth.Subject, java.util.concurrent.Callable<T>)という名前の置換APIが追加され、同じ作業を実行するために使用できます。
      特定のSubjectとして動作します。

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

      型パラメータ:
      T - PrivilegedExceptionActionのrunメソッドから返される値の型。
      パラメータ:
      subject - 指定したactionが実行されるときのSubject このパラメータはnullになる可能性がある。
      action - 指定したSubjectとして実行されるコード。
      戻り値:
      PrivilegedExceptionActionのrunメソッドによって返される値。
      例外:
      PrivilegedActionException - PrivilegedExceptionAction.runメソッドがチェック例外をスローした場合。
      NullPointerException - 指定されたPrivilegedExceptionActionnullである場合。
      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と同じになります。 指定されたAccessControlContextnullの場合、このメソッドはProtectionDomainの空のコレクションを使用して、新規AccessControlContextをインスタンス化します。

      型パラメータ:
      T - PrivilegedActionのrunメソッドから返される値の型。
      パラメータ:
      subject - 指定したactionが実行されるときのSubject このパラメータはnullになる可能性がある。
      action - 指定したSubjectとして実行されるコード。
      acc - 指定したsubjectactionが結びつけられているAccessControlContext
      戻り値:
      PrivilegedActionのrunメソッドによって返される値。
      例外:
      NullPointerException - PrivilegedActionnullである場合。
      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と同じになります。 指定されたAccessControlContextnullの場合、このメソッドはProtectionDomainの空のコレクションを使用して、新規AccessControlContextをインスタンス化します。

      型パラメータ:
      T - PrivilegedExceptionActionのrunメソッドから返される値の型。
      パラメータ:
      subject - 指定したactionが実行されるときのSubject このパラメータはnullになる可能性がある。
      action - 指定したSubjectとして実行されるコード。
      acc - 指定したsubjectactionが結びつけられているAccessControlContext
      戻り値:
      PrivilegedExceptionActionのrunメソッドによって返される値。
      例外:
      PrivilegedActionException - PrivilegedExceptionAction.runメソッドがチェック例外をスローした場合。
      NullPointerException - 指定されたPrivilegedExceptionActionnullである場合。
      SecurityException - セキュリティ・マネージャがインストールされていて、呼び出し元にこのメソッドを呼び出すためのAuthPermission("doAsPrivileged")権限がない場合。
    • getPrincipals

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

      返されるSetは、このSubjectの内部的なPrincipal Setに基づいています。 返されたSetに対する変更は、内部のPrincipal Setにも反映されます。

      セキュリティ・マネージャがインストールされている場合、呼び出し元は返されたセットを変更するためのAuthPermission("modifyPrincipals")パーミッションを持たなければなりません。そうしないとSecurityExceptionがスローされます。

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

      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 - 指定されたClassnullである場合。
    • getPublicCredentials

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

      返されるSetは、このSubjectの内部的な公開資格Setに基づいています。 返されたSetに対する変更は、内部の公開資格Setにも反映されます。

      セキュリティ・マネージャがインストールされている場合、呼び出し元は返されたセットを変更するためのAuthPermission("modifyPublicCredentials")パーミッションを持たなければなりません。そうしないとSecurityExceptionがスローされます。

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

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

      返されるSetは、このSubjectの内部的な非公開資格Setに基づいています。 返されたSetに対する変更は、内部の非公開資格Setにも反映されます。

      セキュリティ・マネージャがインストールされている場合、呼び出し元は返されたセットを変更するためのAuthPermission("modifyPrivateCredentials")パーミッションを持たなければなりません。そうしないとSecurityExceptionがスローされます。

      Setを反復処理しているときに、セキュリティ・マネージャがインストールされていて、呼び出し元に特定の資格証明にアクセスするためのPrivateCredentialPermissionがない場合は、SecurityExceptionがスローされます。 それにもかかわらず、IteratorSetの次の要素に進められます。

      戻り値:
      このSubjectが保持するプライベート資格証明のSet
    • getPublicCredentials

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

      返されるSetは、このSubjectの内部的な公開資格Setに基づいていません。 各メソッドの呼出しに対して、新しいSetが作成されて返されます。 返されたSetに対する変更は、内部的な公開資格Setには反映されません。

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

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

      セキュリティ・マネージャがインストールされている場合、呼び出し側はリクエストされたすべての資格証明にアクセスするためにPrivateCredentialPermissionを持っていなければなりません。そうしないとSecurityExceptionがスローされます。

      返されるSetは、このSubjectの内部的な非公開資格Setに基づいていません。 各メソッドの呼出しに対して、新しいSetが作成されて返されます。 返されたSetに対する変更は、内部的な非公開資格Setには反映されません。

      型パラメータ:
      T - cでモデル化されるクラスの型
      パラメータ:
      c - 返される非公開資格のSetはすべて、このクラスのインスタンスになる。
      戻り値:
      指定したClassのインスタンスである非公開資格のSet
      例外:
      NullPointerException - 指定されたClassnullである場合。
    • 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の文字列表現を返します。
      オーバーライド:
      toString 、クラス:  Object
      戻り値:
      このSubjectの文字列表現。
    • hashCode

      public int hashCode()
      このSubjectのハッシュ・コードを返します。
      オーバーライド:
      hashCode 、クラス:  Object
      戻り値:
      このSubjectのハッシュ・コード。
      例外:
      SecurityException - セキュリティ・マネージャがインストールされていて、呼び出し側にこのSubjectプライベート資格証明にアクセスするためのPrivateCredentialPermissionアクセス権がない場合。
      関連項目: