mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-06-28 14:52:24 +00:00
OPEN - issue SEC-605: JdbcDaoImpl of UserDetailsService should provide a method for customizing creation of the final UserDetails object
http://jira.springframework.org/browse/SEC-605. Added a createUserDetails method and also some other methods which are responsible for executing the individual queries for loading the userinformation and authorities.
This commit is contained in:
parent
40e51dd5fe
commit
c347834401
@ -142,7 +142,7 @@ public class JdbcDaoImpl extends JdbcDaoSupport implements UserDetailsService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {
|
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {
|
||||||
List users = usersByUsernameMapping.execute(username);
|
List users = loadUsersByUsername(username);
|
||||||
|
|
||||||
if (users.size() == 0) {
|
if (users.size() == 0) {
|
||||||
throw new UsernameNotFoundException(
|
throw new UsernameNotFoundException(
|
||||||
@ -154,11 +154,11 @@ public class JdbcDaoImpl extends JdbcDaoSupport implements UserDetailsService {
|
|||||||
Set dbAuthsSet = new HashSet();
|
Set dbAuthsSet = new HashSet();
|
||||||
|
|
||||||
if (enableAuthorities) {
|
if (enableAuthorities) {
|
||||||
dbAuthsSet.addAll(authoritiesByUsernameMapping.execute(user.getUsername()));
|
dbAuthsSet.addAll(loadUserAuthorities(user.getUsername()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enableGroups) {
|
if (enableGroups) {
|
||||||
dbAuthsSet.addAll(groupAuthoritiesByUsernameMapping.execute(user.getUsername()));
|
dbAuthsSet.addAll(loadGroupAuthorities(user.getUsername()));
|
||||||
}
|
}
|
||||||
|
|
||||||
List dbAuths = new ArrayList(dbAuthsSet);
|
List dbAuths = new ArrayList(dbAuthsSet);
|
||||||
@ -173,13 +173,48 @@ public class JdbcDaoImpl extends JdbcDaoSupport implements UserDetailsService {
|
|||||||
|
|
||||||
GrantedAuthority[] arrayAuths = (GrantedAuthority[]) dbAuths.toArray(new GrantedAuthority[dbAuths.size()]);
|
GrantedAuthority[] arrayAuths = (GrantedAuthority[]) dbAuths.toArray(new GrantedAuthority[dbAuths.size()]);
|
||||||
|
|
||||||
String returnUsername = user.getUsername();
|
return createUserDetails(username, user, arrayAuths);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes the <tt>usersByUsernameQuery</tt> and returns a list of UserDetails objects (there should normally
|
||||||
|
* only be one matching user).
|
||||||
|
*/
|
||||||
|
protected List loadUsersByUsername(String username) {
|
||||||
|
return usersByUsernameMapping.execute(username);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads authorities by executing the authoritiesByUsernameQuery.
|
||||||
|
*
|
||||||
|
* @return a list of GrantedAuthority objects for the user
|
||||||
|
*/
|
||||||
|
protected List loadUserAuthorities(String username) {
|
||||||
|
return authoritiesByUsernameMapping.execute(username);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected List loadGroupAuthorities(String username) {
|
||||||
|
return groupAuthoritiesByUsernameMapping.execute(username);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Can be overridden to customize the creation of the final UserDetailsObject returnd from <tt>loadUserByUsername</tt>.
|
||||||
|
*
|
||||||
|
* @param username the name originally passed to loadUserByUsername
|
||||||
|
* @param userFromUserQuery the object returned from the execution of the
|
||||||
|
* @param combinedAuthorities the combined array of authorities from all the authority loading queries.
|
||||||
|
* @return the final UserDetails which should be used in the system.
|
||||||
|
*/
|
||||||
|
protected UserDetails createUserDetails(String username, UserDetails userFromUserQuery,
|
||||||
|
GrantedAuthority[] combinedAuthorities) {
|
||||||
|
String returnUsername = userFromUserQuery.getUsername();
|
||||||
|
|
||||||
if (!usernameBasedPrimaryKey) {
|
if (!usernameBasedPrimaryKey) {
|
||||||
returnUsername = username;
|
returnUsername = username;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new User(returnUsername, user.getPassword(), user.isEnabled(), true, true, true, arrayAuths);
|
return new User(returnUsername, userFromUserQuery.getPassword(), userFromUserQuery.isEnabled(),
|
||||||
|
true, true, true, combinedAuthorities);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user