public class JdbcDaoImpl extends org.springframework.jdbc.core.support.JdbcDaoSupport implements UserDetailsService
Retrieves user details (username, password, enabled flag, and authorities) from a JDBC location.
A default database structure is assumed, (see DEF_USERS_BY_USERNAME_QUERY
and DEF_AUTHORITIES_BY_USERNAME_QUERY
, which most users of this class will need to override, if using an existing
scheme. This may be done by setting the default query strings used. If this does not provide enough flexibility,
another strategy would be to subclass this class and override the MappingSqlQuery
instances used, via the
initMappingSqlQueries()
extension point.
In order to minimise backward compatibility issues, this DAO does not recognise the expiration of user accounts or the expiration of user credentials. However, it does recognise and honour the user enabled/disabled column.
Modifier and Type | Class and Description |
---|---|
protected class |
JdbcDaoImpl.AuthoritiesByUsernameMapping
Query object to look up a user's authorities.
|
protected class |
JdbcDaoImpl.UsersByUsernameMapping
Query object to look up a user.
|
Modifier and Type | Field and Description |
---|---|
protected org.springframework.jdbc.object.MappingSqlQuery |
authoritiesByUsernameMapping |
static String |
DEF_AUTHORITIES_BY_USERNAME_QUERY |
static String |
DEF_USERS_BY_USERNAME_QUERY |
protected org.springframework.jdbc.object.MappingSqlQuery |
usersByUsernameMapping |
Constructor and Description |
---|
JdbcDaoImpl() |
Modifier and Type | Method and Description |
---|---|
protected void |
addCustomAuthorities(String username,
List authorities)
Allows subclasses to add their own granted authorities to the list to be returned in the
User . |
String |
getAuthoritiesByUsernameQuery() |
String |
getRolePrefix() |
String |
getUsersByUsernameQuery() |
protected void |
initDao() |
protected void |
initMappingSqlQueries()
Extension point to allow other MappingSqlQuery objects to be substituted in a subclass
|
boolean |
isUsernameBasedPrimaryKey() |
UserDetails |
loadUserByUsername(String username)
Locates the user based on the username.
|
void |
setAuthoritiesByUsernameQuery(String queryString)
Allows the default query string used to retrieve authorities based on username to be overriden, if
default table or column names need to be changed.
|
void |
setRolePrefix(String rolePrefix)
Allows a default role prefix to be specified.
|
void |
setUsernameBasedPrimaryKey(boolean usernameBasedPrimaryKey)
If
true (the default), indicates the getUsersByUsernameQuery() returns a username
in response to a query. |
void |
setUsersByUsernameQuery(String usersByUsernameQueryString)
Allows the default query string used to retrieve users based on username to be overriden, if default
table or column names need to be changed.
|
public static final String DEF_USERS_BY_USERNAME_QUERY
public static final String DEF_AUTHORITIES_BY_USERNAME_QUERY
protected org.springframework.jdbc.object.MappingSqlQuery authoritiesByUsernameMapping
protected org.springframework.jdbc.object.MappingSqlQuery usersByUsernameMapping
protected void addCustomAuthorities(String username, List authorities)
User
.username
- the username, for use by finder methodsauthorities
- the current granted authorities, as populated from the authoritiesByUsername
mappingpublic String getAuthoritiesByUsernameQuery()
public String getRolePrefix()
public String getUsersByUsernameQuery()
protected void initDao() throws org.springframework.context.ApplicationContextException
initDao
in class org.springframework.dao.support.DaoSupport
org.springframework.context.ApplicationContextException
protected void initMappingSqlQueries()
public boolean isUsernameBasedPrimaryKey()
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, org.springframework.dao.DataAccessException
UserDetailsService
UserDetails
object that comes back may have a username that is of a different case than what was
actually requested..loadUserByUsername
in interface UserDetailsService
username
- the username presented to the DaoAuthenticationProvider
null
)UsernameNotFoundException
- if the user could not be found or the user has no GrantedAuthorityorg.springframework.dao.DataAccessException
- if user could not be found for a repository-specific reasonpublic void setAuthoritiesByUsernameQuery(String queryString)
DEF_AUTHORITIES_BY_USERNAME_QUERY
; when modifying this query, ensure that all returned columns are mapped
back to the same column names as in the default query.queryString
- The query string to setpublic void setRolePrefix(String rolePrefix)
ROLE_
prefix expected to exist in role names (by default) by some other Acegi Security framework
classes, in the case that the prefix is not already present in the db.rolePrefix
- the new prefixpublic void setUsernameBasedPrimaryKey(boolean usernameBasedPrimaryKey)
true
(the default), indicates the getUsersByUsernameQuery()
returns a username
in response to a query. If false
, indicates that a primary key is used instead. If set to
true
, the class will use the database-derived username in the returned UserDetails
.
If false
, the class will use the loadUserByUsername(String)
derived username in the
returned UserDetails
.usernameBasedPrimaryKey
- true
if the mapping queries return the username String
,
or false
if the mapping returns a database primary key.public void setUsersByUsernameQuery(String usersByUsernameQueryString)
DEF_USERS_BY_USERNAME_QUERY
; when
modifying this query, ensure that all returned columns are mapped back to the same column names as in the
default query. If the 'enabled' column does not exist in the source db, a permanent true value for this column
may be returned by using a query similar to "SELECT username,password,'true' as enabled FROM users WHERE username = ?"
usersByUsernameQueryString
- The query string to setCopyright © 2018. All rights reserved.