クラス User

  • 実装されたすべてのインターフェース:
    java.io.SerializableCredentialsContainerUserDetails

    public class User
    extends java.lang.Object
    implements UserDetails, CredentialsContainer
    UserDetailsService によって取得されたコアユーザー情報をモデル化します。

    開発者は、このクラスを直接使用するか、サブクラス化するか、独自の UserDetails 実装をゼロから作成できます。

    equals および hashcode の実装は、username プロパティのみに基づいています。これは、同じユーザープリンシパルオブジェクト(たとえば、ユーザーレジストリ内)のルックアップが、すべてのプロパティ(権限、たとえばパスワード)は同じです。

    この実装は不変ではないことに注意してください。認証後にパスワードを消去できるようにするため、CredentialsContainer インターフェースを実装しています。インスタンスをメモリに保存して再利用する場合、これにより副作用が発生する可能性があります。その場合、UserDetailsService が呼び出されるたびに UserDetailsService からコピーを返すようにしてください。

    関連事項:
    直列化された形式
    • ネストされたクラスのサマリー

      ネストされたクラス  
      修飾子と型 クラス 説明
      static class User.UserBuilder
      追加するユーザーをビルドします。
    • コンストラクターのサマリー

      コンストラクター  
      コンストラクター 説明
      User​(java.lang.String username, java.lang.String password, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, java.util.Collection<? extends GrantedAuthority> authorities)
      DaoAuthenticationProvider で必要な詳細を使用して User を構築します。
      User​(java.lang.String username, java.lang.String password, java.util.Collection<? extends GrantedAuthority> authorities)
      すべてのブール引数を true に設定して、より複雑なコンストラクターを呼び出します。
    • コンストラクターの詳細

      • User

        public User​(java.lang.String username,
                    java.lang.String password,
                    java.util.Collection<? extends GrantedAuthority> authorities)
        すべてのブール引数を true に設定して、より複雑なコンストラクターを呼び出します。
      • User

        public User​(java.lang.String username,
                    java.lang.String password,
                    boolean enabled,
                    boolean accountNonExpired,
                    boolean credentialsNonExpired,
                    boolean accountNonLocked,
                    java.util.Collection<? extends GrantedAuthority> authorities)
        DaoAuthenticationProvider で必要な詳細を使用して User を構築します。
        パラメーター:
        username - DaoAuthenticationProvider に提示されたユーザー名
        password - DaoAuthenticationProvider に提示されるパスワード
        enabled - ユーザーが有効になっている場合は true に設定
        accountNonExpired - アカウントの有効期限が切れていない場合は true に設定
        credentialsNonExpired - 資格情報の有効期限が切れていない場合は、true に設定されます
        accountNonLocked - アカウントがロックされていない場合は true に設定
        authorities - 正しいユーザー名とパスワードを提示し、ユーザーが有効になっている場合に呼び出し元に付与する必要がある権限。null ではありません。
        例外:
        java.lang.IllegalArgumentException - null 値がパラメーターとして、または GrantedAuthority コレクションの要素として渡された場合
    • メソッドの詳細

      • getAuthorities

        public java.util.Collection<GrantedAuthority> getAuthorities()
        インターフェースからコピーされた説明: UserDetails
        ユーザーに付与された権限を返します。null を返すことができません。
        次で指定:
        インターフェース UserDetailsgetAuthorities 
        戻り値:
        自然キーでソートされた権限 (非 null)
      • getPassword

        public java.lang.String getPassword()
        インターフェースからコピーされた説明: UserDetails
        ユーザーの認証に使用されるパスワードを返します。
        次で指定:
        インターフェース UserDetailsgetPassword 
        戻り値:
        パスワード
      • getUsername

        public java.lang.String getUsername()
        インターフェースからコピーされた説明: UserDetails
        ユーザーの認証に使用されるユーザー名を返します。null を返すことはできません。
        次で指定:
        インターフェース UserDetailsgetUsername 
        戻り値:
        ユーザー名 (非 null)
      • isEnabled

        public boolean isEnabled()
        インターフェースからコピーされた説明: UserDetails
        ユーザーが有効か無効かを示します。無効なユーザーは認証できません。
        次で指定:
        インターフェース UserDetailsisEnabled 
        戻り値:
        ユーザーが有効な場合は true、それ以外の場合は false 
      • isAccountNonExpired

        public boolean isAccountNonExpired()
        インターフェースからコピーされた説明: UserDetails
        ユーザーのアカウントの有効期限が切れているかどうかを示します。期限切れのアカウントは認証できません。
        次で指定:
        インターフェース UserDetailsisAccountNonExpired 
        戻り値:
        ユーザーのアカウントが有効な場合(つまり、有効期限が切れていない場合)true、有効でなくなった場合は false (つまり、期限切れ)
      • isAccountNonLocked

        public boolean isAccountNonLocked()
        インターフェースからコピーされた説明: UserDetails
        ユーザーがロックされているかロック解除されているかを示します。ロックされたユーザーは認証できません。
        次で指定:
        インターフェース UserDetailsisAccountNonLocked 
        戻り値:
        ユーザーがロックされていない場合は true、それ以外の場合は false 
      • isCredentialsNonExpired

        public boolean isCredentialsNonExpired()
        インターフェースからコピーされた説明: UserDetails
        ユーザーの資格情報(パスワード)の有効期限が切れているかどうかを示します。期限切れの資格情報は認証を妨げます。
        次で指定:
        インターフェース UserDetailsisCredentialsNonExpired 
        戻り値:
        ユーザーの資格情報が有効な場合(つまり、有効期限が切れていない場合)true、有効でなくなった場合は false (つまり、期限切れ)
      • equals

        public boolean equals​(java.lang.Object obj)
        指定されたオブジェクトが同じ username 値を持つ User インスタンスである場合、true を返します。

        つまり、同じプリンシパルを表す同じユーザー名を持つオブジェクトは等しいです。

        オーバーライド:
        クラス java.lang.Objectequals 
      • hashCode

        public int hashCode()
        username のハッシュコードを返します。
        オーバーライド:
        クラス java.lang.ObjecthashCode 
      • toString

        public java.lang.String toString()
        オーバーライド:
        クラス java.lang.ObjecttoString 
      • withUsername

        public static User.UserBuilder withUsername​(java.lang.String username)
        指定されたユーザー名で UserBuilder を作成します
        パラメーター:
        username - 使用するユーザー名
        戻り値:
        UserBuilder
      • builder

        public static User.UserBuilder builder()
        UserBuilder を作成します
        戻り値:
        UserBuilder
      • withDefaultPasswordEncoder

        @Deprecated
        public static User.UserBuilder withDefaultPasswordEncoder()
        使用すべきではありません。
        この方法を使用することは、本番環境では安全とは見なされませんが、デモや使用開始には受け入れられます。本番環境では、パスワードが外部でエンコードされていることを確認してください。詳細については、メソッド Javadoc を参照してください。このサポートを削除する予定はありません。これは、本番目的では安全でないと見なされることを示すために非推奨です。

        警告 : この方法は本番にとって安全ではないと見なされており、サンプルアプリケーションのみを対象としています。

        ユーザーを作成し、提供されたパスワードを PasswordEncoderFactories.createDelegatingPasswordEncoder() を使用して自動的にエンコードします。例:

         
         UserDetails user = User.withDefaultPasswordEncoder()
             .username("user")
             .password("password")
             .roles("USER")
             .build();
         // outputs {bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG
         System.out.println(user.getPassword());
          
        パスワード "password" はソースコードにコンパイルされ、作成時にメモリに含まれるため、これは本番環境では安全ではありません(これは初心者向けです)。これは、プレーンテキストのパスワードを回復して安全でない方法がまだあることを意味します。UserDetails のパスワードは安全にハッシュされるため、プレーンテキストのパスワードを使用する場合に若干の改善が見られます。つまり、UserDetails パスワードが誤って公開された場合でも、パスワードは安全に保管されます。本番環境では、事前にパスワードをハッシュ化することをお勧めします。例:
         
         PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
         // outputs {bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG
         // remember the password that is printed out and use in the next step
         System.out.println(encoder.encode("password"));
          
         
         UserDetails user = User.withUsername("user")
             .password("{bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG")
             .roles("USER")
             .build();
          
        戻り値:
        デフォルトの PasswordEncoder でパスワードを自動的にエンコードする UserBuilder