クラス User

java.lang.ObjectSE
org.springframework.security.core.userdetails.User
実装されたすべてのインターフェース:
SerializableSECredentialsContainerUserDetails

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

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

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

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

関連事項:
  • コンストラクターの詳細

    • User

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

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

    • getAuthorities

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

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

      public StringSE 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 (つまり、期限切れ)
    • eraseCredentials

      public void eraseCredentials()
      次で指定:
      インターフェース CredentialsContainereraseCredentials 
    • equals

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

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

      オーバーライド:
      クラス ObjectSEequalsSE 
    • hashCode

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

      public StringSE toString()
      オーバーライド:
      クラス ObjectSEtoString 
    • withUsername

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

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

      @DeprecatedSE 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
    • withUserDetails

      public static User.UserBuilder withUserDetails(UserDetails userDetails)