クラス 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

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

    The Authorities Table

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

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

    グループ支援

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

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

    • コンストラクターのサマリー

      コンストラクター  
      コンストラクター 説明
      JdbcDaoImpl()
    • メソッドのサマリー

      すべてのメソッド   インスタンスメソッド   具象メソッド  
      修飾子と型 メソッド 説明
      protected voidaddCustomAuthorities​(java.lang.String username, java.util.List<GrantedAuthority> authorities)
      サブクラスが独自の許可された権限をリストに追加して、 UserDetails で返されるようにします。
      protected UserDetailscreateUserDetails​(java.lang.String username, UserDetails userFromUserQuery, java.util.List<GrantedAuthority> combinedAuthorities)
      loadUserByUsername メソッドによって返される最終的な UserDetailsObject の作成をカスタマイズするためにオーバーライドできます。
      protected java.lang.StringgetAuthoritiesByUsernameQuery()
      protected booleangetEnableAuthorities()
      protected booleangetEnableGroups()
      protected org.springframework.context.support.MessageSourceAccessorgetMessages()
      protected java.lang.StringgetRolePrefix()
      java.lang.StringgetUsersByUsernameQuery()
      protected voidinitDao()
      protected booleanisUsernameBasedPrimaryKey()
      protected java.util.List<GrantedAuthority>loadGroupAuthorities​(java.lang.String username)
      groupAuthoritiesByUsernameQuery から SQL を実行して、権限をロードします。
      protected java.util.List<GrantedAuthority>loadUserAuthorities​(java.lang.String username)
      authoritiesByUsernameQuery から SQL を実行して、権限をロードします。
      UserDetailsloadUserByUsername​(java.lang.String username)
      ユーザー名に基づいてユーザーを見つけます。
      protected java.util.List<UserDetails>loadUsersByUsername​(java.lang.String username)
      SQL usersByUsernameQuery を実行し、UserDetails オブジェクトのリストを返します。
      voidsetAuthoritiesByUsernameQuery​(java.lang.String queryString)
      デフォルトのテーブル名または列名を変更する必要がある場合に、ユーザー名に基づいて権限を取得するために使用されるデフォルトのクエリ文字列を上書きできるようにします。
      voidsetEnableAuthorities​(boolean enableAuthorities)
      権限テーブルからの権限(ロール)のロードを有効にします。
      voidsetEnableGroups​(boolean enableGroups)
      グループオーソリティのサポートを有効にします。
      voidsetGroupAuthoritiesByUsernameQuery​(java.lang.String queryString)
      デフォルトのテーブル名または列名を変更する必要がある場合に、ユーザー名に基づいてグループ権限を取得するために使用されるデフォルトのクエリ文字列を上書きできるようにします。
      voidsetMessageSource​(org.springframework.context.MessageSource messageSource)
      voidsetRolePrefix​(java.lang.String rolePrefix)
      デフォルトのロールプレフィックスを指定できます。
      voidsetUsernameBasedPrimaryKey​(boolean usernameBasedPrimaryKey)
      true (デフォルト)の場合、クエリにレスポンスして getUsersByUsernameQuery() がユーザー名を返すことを示します。
      voidsetUsersByUsernameQuery​(java.lang.String usersByUsernameQueryString)
      デフォルトのテーブル名または列名を変更する必要がある場合に、ユーザー名に基づいてユーザーを取得するために使用されるデフォルトのクエリ文字列を上書きできるようにします。
      • クラス org.springframework.jdbc.core.support.JdbcDaoSupport から継承されたメソッド

        checkDaoConfig, createJdbcTemplate, getConnection, getDataSource, getExceptionTranslator, getJdbcTemplate, initTemplateConfig, releaseConnection, setDataSource, setJdbcTemplate
      • クラス org.springframework.dao.support.DaoSupport から継承されたメソッド

        afterPropertiesSet
      • クラス java.lang.Object から継承されたメソッド

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • フィールドの詳細

      • DEFAULT_USER_SCHEMA_DDL_LOCATION

        public static final java.lang.String DEFAULT_USER_SCHEMA_DDL_LOCATION
        関連事項:
        定数フィールド値
      • DEF_USERS_BY_USERNAME_QUERY

        public static final java.lang.String DEF_USERS_BY_USERNAME_QUERY
        関連事項:
        定数フィールド値
      • DEF_AUTHORITIES_BY_USERNAME_QUERY

        public static final java.lang.String DEF_AUTHORITIES_BY_USERNAME_QUERY
        関連事項:
        定数フィールド値
      • DEF_GROUP_AUTHORITIES_BY_USERNAME_QUERY

        public static final java.lang.String DEF_GROUP_AUTHORITIES_BY_USERNAME_QUERY
        関連事項:
        定数フィールド値
      • messages

        protected org.springframework.context.support.MessageSourceAccessor messages
    • コンストラクターの詳細

      • JdbcDaoImpl

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

      • getMessages

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

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

        public java.lang.String getUsersByUsernameQuery()
      • initDao

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

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

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

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

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

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

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

        protected java.lang.String getAuthoritiesByUsernameQuery()
      • setGroupAuthoritiesByUsernameQuery

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

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

        protected java.lang.String 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​(java.lang.String 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