クラス 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.Aware
、org.springframework.beans.factory.InitializingBean
、org.springframework.context.MessageSourceAware
、UserDetailsService
- 既知の直属サブクラス
JdbcUserDetailsManager
public class JdbcDaoImpl
extends org.springframework.jdbc.core.support.JdbcDaoSupport
implements UserDetailsService, org.springframework.context.MessageSourceAware
UserDetailsService 実装。JDBC クエリを使用してデータベースからユーザーの詳細(ユーザー名、パスワード、有効なフラグ、権限)を取得します。
既存のスキーマを使用している場合は、データベース設定と一致するようにクエリ usersByUsernameQuery および authoritiesByUsernameQuery を設定する必要があります(
デフォルトスキーマ
デフォルトのデータベーススキーマが想定されており、2 つのテーブル「ユーザー」と「権限」があります。The Users table
このテーブルには、ユーザーのログイン名、パスワード、有効なステータスが含まれています。列 |
---|
username |
パスワード |
使用可能 |
The Authorities Table
列 |
---|
username |
権限 |
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 プロパティを設定することでこれをカスタマイズできますが、返される行の形式はデフォルトと一致している必要があります。
フィールドのサマリー
フィールド修飾子と型フィールド説明static final StringSE
static final StringSE
static final StringSE
static final StringSE
protected org.springframework.context.support.MessageSourceAccessor
クラス org.springframework.dao.support.DaoSupport から継承されたフィールド
logger
コンストラクターのサマリー
コンストラクターメソッドのサマリー
修飾子と型メソッド説明protected void
addCustomAuthorities
(StringSE username, ListSE<GrantedAuthority> authorities) サブクラスが独自の許可された権限をリストに追加して、 UserDetails で返されるようにします。protected UserDetails
createUserDetails
(StringSE username, UserDetails userFromUserQuery, ListSE<GrantedAuthority> combinedAuthorities) loadUserByUsername メソッドによって返される最終的な UserDetailsObject の作成をカスタマイズするためにオーバーライドできます。protected StringSE
protected boolean
protected boolean
protected org.springframework.context.support.MessageSourceAccessor
protected StringSE
protected void
initDao()
protected boolean
protected ListSE<GrantedAuthority>
loadGroupAuthorities
(StringSE username) groupAuthoritiesByUsernameQuery から SQL を実行して、権限をロードします。protected ListSE<GrantedAuthority>
loadUserAuthorities
(StringSE username) authoritiesByUsernameQuery から SQL を実行して、権限をロードします。loadUserByUsername
(StringSE username) ユーザー名に基づいてユーザーを見つけます。protected ListSE<UserDetails>
loadUsersByUsername
(StringSE username) SQL usersByUsernameQuery を実行し、UserDetails オブジェクトのリストを返します。void
setAuthoritiesByUsernameQuery
(StringSE queryString) デフォルトのテーブル名または列名を変更する必要がある場合に、ユーザー名に基づいて権限を取得するために使用されるデフォルトのクエリ文字列を上書きできるようにします。void
setEnableAuthorities
(boolean enableAuthorities) 権限テーブルからの権限(ロール)のロードを有効にします。void
setEnableGroups
(boolean enableGroups) グループオーソリティのサポートを有効にします。void
setGroupAuthoritiesByUsernameQuery
(StringSE queryString) デフォルトのテーブル名または列名を変更する必要がある場合に、ユーザー名に基づいてグループ権限を取得するために使用されるデフォルトのクエリ文字列を上書きできるようにします。void
setMessageSource
(org.springframework.context.MessageSource messageSource) void
setRolePrefix
(StringSE rolePrefix) デフォルトのロールプレフィックスを指定できます。void
setUsernameBasedPrimaryKey
(boolean usernameBasedPrimaryKey) true
(デフォルト)の場合、クエリにレスポンスしてgetUsersByUsernameQuery()
がユーザー名を返すことを示します。void
setUsersByUsernameQuery
(StringSE usersByUsernameQueryString) デフォルトのテーブル名または列名を変更する必要がある場合に、ユーザー名に基づいてユーザーを取得するために使用されるデフォルトのクエリ文字列を上書きできるようにします。クラス org.springframework.jdbc.core.support.JdbcDaoSupport から継承されたメソッド
checkDaoConfig, createJdbcTemplate, getConnection, getDataSource, getExceptionTranslator, getJdbcTemplate, initTemplateConfig, releaseConnection, setDataSource, setJdbcTemplate
クラス org.springframework.dao.support.DaoSupport から継承されたメソッド
afterPropertiesSet
フィールドの詳細
コンストラクターの詳細
JdbcDaoImpl
public JdbcDaoImpl()
メソッドの詳細
getMessages
protected org.springframework.context.support.MessageSourceAccessor getMessages()- 戻り値:
- メッセージ
addCustomAuthorities
サブクラスが独自の許可された権限をリストに追加して、 UserDetails で返されるようにします。- パラメーター:
username
- ファインダーメソッドで使用するユーザー名authorities
-authoritiesByUsername
マッピングから読み込まれた、現在付与されている権限
getUsersByUsernameQuery
initDao
protected void initDao() throws org.springframework.context.ApplicationContextException- オーバーライド:
- クラス
org.springframework.dao.support.DaoSupport
のinitDao
- 例外:
org.springframework.context.ApplicationContextException
loadUserByUsername
インターフェースからコピーされた説明:UserDetailsService
ユーザー名に基づいてユーザーを見つけます。実際の実装では、実装インスタンスの構成方法に応じて、検索で大文字と小文字が区別される場合と、大文字と小文字が区別されない場合があります。この場合、戻ってくるUserDetails
オブジェクトのユーザー名は、実際にリクエストされたものとは異なる場合があります。- 次で指定:
- インターフェース
UserDetailsService
のloadUserByUsername
- パラメーター:
username
- データが必要なユーザーを識別するユーザー名。- 戻り値:
- 完全に入力されたユーザーレコード (非
null
) - 例外:
UsernameNotFoundException
- ユーザーが見つからなかった場合、またはユーザーに GrantedAuthority がない場合
loadUsersByUsername
SQL usersByUsernameQuery を実行し、UserDetails オブジェクトのリストを返します。通常、一致するユーザーは 1 人だけです。loadUserAuthorities
authoritiesByUsernameQuery から SQL を実行して、権限をロードします。- 戻り値:
- ユーザーの GrantedAuthority オブジェクトのリスト
loadGroupAuthorities
groupAuthoritiesByUsernameQuery から SQL を実行して、権限をロードします。- 戻り値:
- ユーザーの GrantedAuthority オブジェクトのリスト
createUserDetails
protected UserDetails createUserDetails(StringSE username, UserDetails userFromUserQuery, ListSE<GrantedAuthority> combinedAuthorities) loadUserByUsername メソッドによって返される最終的な UserDetailsObject の作成をカスタマイズするためにオーバーライドできます。- パラメーター:
username
- 最初に loadUserByUsername に渡された名前userFromUserQuery
- 実行から返されたオブジェクトcombinedAuthorities
- すべての権限ロードクエリからの権限の組み合わせ配列。- 戻り値:
- システムで使用する必要がある最終的な UserDetails。
setAuthoritiesByUsernameQuery
デフォルトのテーブル名または列名を変更する必要がある場合に、ユーザー名に基づいて権限を取得するために使用されるデフォルトのクエリ文字列をオーバーライドできるようにします。デフォルトのクエリはDEF_AUTHORITIES_BY_USERNAME_QUERY
です。このクエリを変更するときは、返されたすべての列がデフォルトのクエリと同じ列位置にマップされていることを確認してください。- パラメーター:
queryString
- 設定する SQL クエリ文字列
getAuthoritiesByUsernameQuery
setGroupAuthoritiesByUsernameQuery
デフォルトのテーブル名または列名を変更する必要がある場合に、ユーザー名に基づいてグループ権限を取得するために使用されるデフォルトのクエリ文字列をオーバーライドできるようにします。デフォルトのクエリはDEF_GROUP_AUTHORITIES_BY_USERNAME_QUERY
です。このクエリを変更するときは、返されたすべての列がデフォルトのクエリと同じ列位置にマップされていることを確認してください。- パラメーター:
queryString
- 設定する SQL クエリ文字列
setRolePrefix
デフォルトのロールプレフィックスを指定できます。これが空でない値に設定されている場合、データベースから読み込まれたすべてのロールの前に自動的に追加されます。これは、たとえば、プレフィックスがデータベースにまだ存在しない場合に、他の Spring Security クラスによって(デフォルトで)ロール名に存在すると予想される ROLE _ プレフィックスを追加するために使用できます。- パラメーター:
rolePrefix
- 新しい接頭辞
getRolePrefix
setUsernameBasedPrimaryKey
public void setUsernameBasedPrimaryKey(boolean usernameBasedPrimaryKey) true
(デフォルト)の場合、getUsersByUsernameQuery()
がクエリにレスポンスしてユーザー名を返すことを示します。false
の場合、代わりに主キーが使用されることを示します。true
に設定されている場合、クラスは返されたUserDetails
でデータベースから派生したユーザー名を使用します。false
の場合、クラスは返されたUserDetails
でloadUserByUsername(String)
から派生したユーザー名を使用します。- パラメーター:
usernameBasedPrimaryKey
- マッピングクエリがユーザー名String
を返す場合はtrue
、マッピングがデータベースの主キーを返す場合はfalse
。
isUsernameBasedPrimaryKey
protected boolean isUsernameBasedPrimaryKey()setUsersByUsernameQuery
デフォルトのテーブル名または列名を変更する必要がある場合に、ユーザー名に基づいてユーザーを取得するために使用されるデフォルトのクエリ文字列をオーバーライドできるようにします。デフォルトのクエリは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) 権限テーブルから権限(ロール)をロードできるようにします。デフォルトは truegetEnableGroups
protected boolean getEnableGroups()setEnableGroups
public void setEnableGroups(boolean enableGroups) グループ権限のサポートを有効にします。デフォルトは false- パラメーター:
enableGroups
-
setMessageSource
public void setMessageSource(org.springframework.context.MessageSource messageSource) - 次で指定:
- インターフェース
org.springframework.context.MessageSourceAware
のsetMessageSource