モジュール java.base
パッケージ 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, DomainCombiner, 直列化された形式
    • コンストラクタのサマリー

      コンストラクタ 
      コンストラクタ 説明
      Subject()
      空のPrincipalのSetと空の公開資格および非公開資格のSetとで、Subjectのインスタンスを作成します。
      Subject​(boolean readOnly, Set<? extends Principal> principals, Set<?> pubCredentials, Set<?> privCredentials)
      Principalと資格を指定して、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 - 指定された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

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

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

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

        public static <T> T doAs​(Subject subject,
                                 PrivilegedAction<T> action)
        特定の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

        public static <T> T doAs​(Subject subject,
                                 PrivilegedExceptionAction<T> action)
                          throws PrivilegedActionException
        特定の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

        public static <T> T doAsPrivileged​(Subject subject,
                                           PrivilegedAction<T> action,
                                           AccessControlContext acc)
        特定の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

        public static <T> T doAsPrivileged​(Subject subject,
                                           PrivilegedExceptionAction<T> action,
                                           AccessControlContext acc)
                                    throws PrivilegedActionException
        特定の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 PrincipalSet<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権限がない場合。
        関連項目:
        Object.hashCode()HashMap
      • toString

        public String toString()
        このSubjectの文字列表現を返します。
        オーバーライド:
        toString 、クラス:  Object
        戻り値:
        このSubjectの文字列表現。