クラス JdbcDaoImpl

java.lang.ObjectSE
org.springframework.dao.support.DaoSupport
org.springframework.jdbc.core.support.JdbcDaoSupport
org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl
実装されたすべてのインターフェース:
org.springframework.beans.factory.Awareorg.springframework.beans.factory.InitializingBeanorg.springframework.context.MessageSourceAwareUserDetailsService
既知の直属サブクラス
JdbcUserDetailsManager

public class JdbcDaoImpl extends org.springframework.jdbc.core.support.JdbcDaoSupport implements UserDetailsService, org.springframework.context.MessageSourceAware
UserDetailsService 実装。JDBC クエリを使用してデータベースからユーザーの詳細(ユーザー名、パスワード、有効なフラグ、権限)を取得します。

デフォルトスキーマ

デフォルトのデータベーススキーマが想定されており、2 つのテーブル「ユーザー」と「権限」があります。

The Users table

このテーブルには、ユーザーのログイン名、パスワード、有効なステータスが含まれています。
ユーザー名
パスワード
使用可能

The Authorities Table

ユーザー名
権限
既存のスキーマを使用している場合は、データベース設定と一致するようにクエリ usersByUsernameQuery および authoritiesByUsernameQuery を設定する必要があります(DEF_USERS_BY_USERNAME_QUERY および DEF_AUTHORITIES_BY_USERNAME_QUERY を参照)。

下位互換性の課題を最小限に抑えるために、この実装はユーザーアカウントの有効期限またはユーザー資格情報の有効期限を認識しません。ただし、ユーザーの有効化 / 無効化列は認識され、尊重されます。これは、結果セットの boolean 型にマップする必要があります(SQL 型は、使用しているデータベースによって異なります)。他のすべての列は String にマップされます。

グループ支援

グループベースの権限のサポートは、 enableGroups プロパティを true に設定することで有効にできます( enableAuthorities に設定することもできます)権限のロードを直接無効にする場合は false )。このアプローチでは、権限はグループに割り当てられ、ユーザーの権限は、所属するグループに基づいて決定されます。最終結果は同じですが( GrantedAuthority のセットを含む UserDetails がロードされます)、一部のアプリケーションの管理には、異なる永続化戦略の方が適している場合があります。

グループが使用されている場合、"groups"、"group_members"、"group_authorities" のテーブルが使用されます。グループ権限のロードに使用されるデフォルトの照会については、DEF_GROUP_AUTHORITIES_BY_USERNAME_QUERY を参照してください。ここでも、 groupAuthoritiesByUsernameQuery プロパティを設定することでこれをカスタマイズできますが、返される行の形式はデフォルトと一致している必要があります。

  • フィールドの詳細

  • コンストラクターの詳細

    • JdbcDaoImpl

      public JdbcDaoImpl()
  • メソッドの詳細

    • getMessages

      protected org.springframework.context.support.MessageSourceAccessor getMessages()
      戻り値:
      メッセージ
    • addCustomAuthorities

      protected void addCustomAuthorities(StringSE username, ListSE<GrantedAuthority> authorities)
      サブクラスが独自の許可された権限をリストに追加して、 UserDetails で返されるようにします。
      パラメーター:
      username - ファインダーメソッドで使用するユーザー名
      authorities - authoritiesByUsername マッピングから読み込まれた、現在付与されている権限
    • getUsersByUsernameQuery

      public StringSE getUsersByUsernameQuery()
    • initDao

      protected void initDao() throws org.springframework.context.ApplicationContextException
      オーバーライド:
      クラス org.springframework.dao.support.DaoSupportinitDao 
      例外:
      org.springframework.context.ApplicationContextException
    • loadUserByUsername

      public UserDetails loadUserByUsername(StringSE username) throws UsernameNotFoundException
      インターフェースからコピーされた説明: UserDetailsService
      ユーザー名に基づいてユーザーを見つけます。実際の実装では、実装インスタンスの構成方法に応じて、検索で大文字と小文字が区別される場合と、大文字と小文字が区別されない場合があります。この場合、戻ってくる UserDetails オブジェクトのユーザー名は、実際にリクエストされたものとは異なる場合があります。
      次で指定:
      インターフェース UserDetailsServiceloadUserByUsername 
      パラメーター:
      username - データが必要なユーザーを識別するユーザー名。
      戻り値:
      完全に入力されたユーザーレコード (非 null)
      例外:
      UsernameNotFoundException - ユーザーが見つからなかった場合、またはユーザーに GrantedAuthority がない場合
    • loadUsersByUsername

      protected ListSE<UserDetails> loadUsersByUsername(StringSE username)
      SQL usersByUsernameQuery を実行し、UserDetails オブジェクトのリストを返します。通常、一致するユーザーは 1 人だけです。
    • loadUserAuthorities

      protected ListSE<GrantedAuthority> loadUserAuthorities(StringSE username)
      authoritiesByUsernameQuery から SQL を実行して、権限をロードします。
      戻り値:
      ユーザーの GrantedAuthority オブジェクトのリスト
    • loadGroupAuthorities

      protected ListSE<GrantedAuthority> loadGroupAuthorities(StringSE username)
      groupAuthoritiesByUsernameQuery から SQL を実行して、権限をロードします。
      戻り値:
      ユーザーの GrantedAuthority オブジェクトのリスト
    • createUserDetails

      protected UserDetails createUserDetails(StringSE username, UserDetails userFromUserQuery, ListSE<GrantedAuthority> combinedAuthorities)
      loadUserByUsername メソッドによって返される最終的な UserDetailsObject の作成をカスタマイズするためにオーバーライドできます。
      パラメーター:
      username - 最初に loadUserByUsername に渡された名前
      userFromUserQuery - 実行から返されたオブジェクト
      combinedAuthorities - すべての権限ロードクエリからの権限の組み合わせ配列。
      戻り値:
      システムで使用する必要がある最終的な UserDetails。
    • setAuthoritiesByUsernameQuery

      public void setAuthoritiesByUsernameQuery(StringSE queryString)
      デフォルトのテーブル名または列名を変更する必要がある場合に、ユーザー名に基づいて権限を取得するために使用されるデフォルトのクエリ文字列をオーバーライドできるようにします。デフォルトのクエリは DEF_AUTHORITIES_BY_USERNAME_QUERY です。このクエリを変更するときは、返されたすべての列がデフォルトのクエリと同じ列位置にマップされていることを確認してください。
      パラメーター:
      queryString - 設定する SQL クエリ文字列
    • getAuthoritiesByUsernameQuery

      protected StringSE getAuthoritiesByUsernameQuery()
    • setGroupAuthoritiesByUsernameQuery

      public void setGroupAuthoritiesByUsernameQuery(StringSE queryString)
      デフォルトのテーブル名または列名を変更する必要がある場合に、ユーザー名に基づいてグループ権限を取得するために使用されるデフォルトのクエリ文字列をオーバーライドできるようにします。デフォルトのクエリは DEF_GROUP_AUTHORITIES_BY_USERNAME_QUERY です。このクエリを変更するときは、返されたすべての列がデフォルトのクエリと同じ列位置にマップされていることを確認してください。
      パラメーター:
      queryString - 設定する SQL クエリ文字列
    • setRolePrefix

      public void setRolePrefix(StringSE rolePrefix)
      デフォルトのロールプレフィックスを指定できます。これが空でない値に設定されている場合、データベースから読み込まれたすべてのロールの前に自動的に追加されます。これは、たとえば、プレフィックスがデータベースにまだ存在しない場合に、他の Spring Security クラスによって(デフォルトで)ロール名に存在すると予想される ROLE _ プレフィックスを追加するために使用できます。
      パラメーター:
      rolePrefix - 新しい接頭辞
    • getRolePrefix

      protected StringSE getRolePrefix()
    • setUsernameBasedPrimaryKey

      public void setUsernameBasedPrimaryKey(boolean usernameBasedPrimaryKey)
      true (デフォルト)の場合、getUsersByUsernameQuery() がクエリにレスポンスしてユーザー名を返すことを示します。false の場合、代わりに主キーが使用されることを示します。true に設定されている場合、クラスは返された UserDetails でデータベースから派生したユーザー名を使用します。false の場合、クラスは返された UserDetailsloadUserByUsername(String) から派生したユーザー名を使用します。
      パラメーター:
      usernameBasedPrimaryKey - マッピングクエリがユーザー名 String を返す場合は true、マッピングがデータベースの主キーを返す場合は false
    • isUsernameBasedPrimaryKey

      protected boolean isUsernameBasedPrimaryKey()
    • setUsersByUsernameQuery

      public void setUsersByUsernameQuery(StringSE usersByUsernameQueryString)
      デフォルトのテーブル名または列名を変更する必要がある場合に、ユーザー名に基づいてユーザーを取得するために使用されるデフォルトのクエリ文字列をオーバーライドできるようにします。デフォルトのクエリは DEF_USERS_BY_USERNAME_QUERY です。このクエリを変更するときは、返されたすべての列がデフォルトのクエリと同じ列位置にマップされていることを確認してください。'enabled' 列がソースデータベースに存在しない場合、次のようなクエリを使用して、この列の永続的な true 値を返すことができます。
       "select username,password,'true' as enabled from users where username = ?"
       
      パラメーター:
      usersByUsernameQueryString - 設定するクエリ文字列
    • getEnableAuthorities

      protected boolean getEnableAuthorities()
    • setEnableAuthorities

      public void setEnableAuthorities(boolean enableAuthorities)
      権限テーブルから権限(ロール)をロードできるようにします。デフォルトは true
    • getEnableGroups

      protected boolean getEnableGroups()
    • setEnableGroups

      public void setEnableGroups(boolean enableGroups)
      グループ権限のサポートを有効にします。デフォルトは false
      パラメーター:
      enableGroups -
    • setMessageSource

      public void setMessageSource(org.springframework.context.MessageSource messageSource)
      次で指定:
      インターフェース org.springframework.context.MessageSourceAwaresetMessageSource