代码
- public class JdbcDaoImpl extends JdbcDaoSupport implements UserDetailsService {
-
-
- public static final String DEF_USERS_BY_USERNAME_QUERY =
- "SELECT username,password,enabled FROM users WHERE username = ?";
- public static final String DEF_AUTHORITIES_BY_USERNAME_QUERY =
- "SELECT username,authority FROM authorities WHERE username = ?";
-
-
-
- protected MappingSqlQuery authoritiesByUsernameMapping;
- protected MappingSqlQuery usersByUsernameMapping;
- private String authoritiesByUsernameQuery;
- private String rolePrefix = "";
- private String usersByUsernameQuery;
- private boolean usernameBasedPrimaryKey = true;
-
-
-
- public JdbcDaoImpl() {
- usersByUsernameQuery = DEF_USERS_BY_USERNAME_QUERY;
- authoritiesByUsernameQuery = DEF_AUTHORITIES_BY_USERNAME_QUERY;
- }
-
-
-
- protected void addCustomAuthorities(String username, List authorities) {}
-
- public String getAuthoritiesByUsernameQuery() {
- return authoritiesByUsernameQuery;
- }
-
- public String getRolePrefix() {
- return rolePrefix;
- }
-
- public String getUsersByUsernameQuery() {
- return usersByUsernameQuery;
- }
-
- protected void initDao() throws ApplicationContextException {
- initMappingSqlQueries();
- }
-
-
-
- protected void initMappingSqlQueries() {
- this.usersByUsernameMapping = new UsersByUsernameMapping(getDataSource());
- this.authoritiesByUsernameMapping = new AuthoritiesByUsernameMapping(getDataSource());
- }
-
- public boolean isUsernameBasedPrimaryKey() {
- return usernameBasedPrimaryKey;
- }
-
- public UserDetails loadUserByUsername(String username)
- throws UsernameNotFoundException, DataAccessException {
-
- List users = usersByUsernameMapping.execute(username);
-
- if (users.size() == 0) {
- throw new UsernameNotFoundException("User not found");
- }
-
- UserDetails user = (UserDetails) users.get(0);
-
- List dbAuths = authoritiesByUsernameMapping.execute(user.getUsername());
-
- addCustomAuthorities(user.getUsername(), dbAuths);
-
- if (dbAuths.size() == 0) {
- throw new UsernameNotFoundException("User has no GrantedAuthority");
- }
-
- GrantedAuthority[] arrayAuths = (GrantedAuthority[]) dbAuths.toArray(new GrantedAuthority[dbAuths.size()]);
-
- String returnUsername = user.getUsername();
-
- if (!usernameBasedPrimaryKey) {
- returnUsername = username;
- }
-
- return new User(returnUsername, user.getPassword(), user.isEnabled(), true, true, true, arrayAuths);
- }
-
- public void setAuthoritiesByUsernameQuery(String queryString) {
- authoritiesByUsernameQuery = queryString;
- }
-
- public void setRolePrefix(String rolePrefix) {
- this.rolePrefix = rolePrefix;
- }
-
- public void setUsernameBasedPrimaryKey(boolean usernameBasedPrimaryKey) {
- this.usernameBasedPrimaryKey = usernameBasedPrimaryKey;
- }
-
- public void setUsersByUsernameQuery(String usersByUsernameQueryString) {
- this.usersByUsernameQuery = usersByUsernameQueryString;
- }
-
-
-
-
-
- protected class AuthoritiesByUsernameMapping extends MappingSqlQuery {
- protected AuthoritiesByUsernameMapping(DataSource ds) {
- super(ds, authoritiesByUsernameQuery);
- declareParameter(new SqlParameter(Types.VARCHAR));
- compile();
- }
-
- protected Object mapRow(ResultSet rs, int rownum)
- throws SQLException {
- String roleName = rolePrefix + rs.getString(2);
- GrantedAuthorityImpl authority = new GrantedAuthorityImpl(roleName);
-
- return authority;
- }
- }
-
-
-
- protected class UsersByUsernameMapping extends MappingSqlQuery {
- protected UsersByUsernameMapping(DataSource ds) {
- super(ds, usersByUsernameQuery);
- declareParameter(new SqlParameter(Types.VARCHAR));
- compile();
- }
-
- protected Object mapRow(ResultSet rs, int rownum)
- throws SQLException {
- String username = rs.getString(1);
- String password = rs.getString(2);
- boolean enabled = rs.getBoolean(3);
- UserDetails user = new User(username, password, enabled, true, true, true,
- new GrantedAuthority[] {new GrantedAuthorityImpl("HOLDER")});
-
- return user;
- }
- }
- }
代码
-
- protected void additionalAuthenticationChecks(UserDetails userDetails,
- UsernamePasswordAuthenticationToken authentication)
- throws AuthenticationException {
- Object salt = null;
-
- if (this.saltSource != null) {
- salt = this.saltSource.getSalt(userDetails);
- }
-
- if (authentication.getCredentials() == null) {
- throw new BadCredentialsException(messages.getMessage(
- "AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"),
- includeDetailsObject ? userDetails : null);
- }
-
- String presentedPassword = authentication.getCredentials() == null ? "" : authentication.getCredentials().toString();
-
-
- if (!passwordEncoder.isPasswordValid(
- userDetails.getPassword(), presentedPassword, salt)) {
- throw new BadCredentialsException(messages.getMessage(
- "AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"),
- includeDetailsObject ? userDetails : null);
- }
- }
|