mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-07-12 13:23:29 +00:00
Add grantedAuthorityMapper as a class member
- Add unit tests for setGrantedAuthorityMapper method Signed-off-by: dae won <eodnjs01477@gmail.com>
This commit is contained in:
parent
cb07031259
commit
45b51fe3c8
@ -159,6 +159,8 @@ public class JdbcUserDetailsManager extends JdbcDaoImpl implements UserDetailsMa
|
||||
|
||||
private RowMapper<UserDetails> userDetailsMapper = this::mapToUser;
|
||||
|
||||
private RowMapper<GrantedAuthority> grantedAuthorityMapper = this::mapToGrantedAuthority;
|
||||
|
||||
public JdbcUserDetailsManager() {
|
||||
}
|
||||
|
||||
@ -182,6 +184,21 @@ public class JdbcUserDetailsManager extends JdbcDaoImpl implements UserDetailsMa
|
||||
this.userDetailsMapper = mapper;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the {@code RowMapper} to convert each authority result row into a
|
||||
* {@link GrantedAuthority} object.
|
||||
*
|
||||
* The default mapper expects columns with names like 'authority' or 'role', and maps
|
||||
* them directly to SimpleGrantedAuthority objects.
|
||||
* @param mapper the {@code RowMapper} to use for mapping rows in the database to
|
||||
* GrantedAuthority objects, must not be null
|
||||
* @since 6.5
|
||||
*/
|
||||
public void setGrantedAuthorityMapper(RowMapper<GrantedAuthority> mapper) {
|
||||
Assert.notNull(mapper, "grantedAuthorityMapper cannot be null");
|
||||
this.grantedAuthorityMapper = mapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initDao() throws ApplicationContextException {
|
||||
if (this.authenticationManager == null) {
|
||||
@ -197,7 +214,7 @@ public class JdbcUserDetailsManager extends JdbcDaoImpl implements UserDetailsMa
|
||||
*/
|
||||
@Override
|
||||
protected List<UserDetails> loadUsersByUsername(String username) {
|
||||
return getJdbcTemplate().query(getUsersByUsernameQuery(), userDetailsMapper, username);
|
||||
return getJdbcTemplate().query(getUsersByUsernameQuery(), this.userDetailsMapper, username);
|
||||
}
|
||||
|
||||
private UserDetails mapToUser(ResultSet rs, int rowNum) throws SQLException {
|
||||
@ -406,10 +423,10 @@ public class JdbcUserDetailsManager extends JdbcDaoImpl implements UserDetailsMa
|
||||
this.logger.debug("Loading authorities for group '" + groupName + "'");
|
||||
Assert.hasText(groupName, "groupName should have text");
|
||||
return getJdbcTemplate().query(this.groupAuthoritiesSql, new String[] { groupName },
|
||||
this::mapToGrantedAuthority);
|
||||
this.grantedAuthorityMapper);
|
||||
}
|
||||
|
||||
protected GrantedAuthority mapToGrantedAuthority(ResultSet rs, int rowNum) throws SQLException {
|
||||
private GrantedAuthority mapToGrantedAuthority(ResultSet rs, int rowNum) throws SQLException {
|
||||
String roleName = getRolePrefix() + rs.getString(3);
|
||||
return new SimpleGrantedAuthority(roleName);
|
||||
}
|
||||
|
@ -52,9 +52,8 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.BDDMockito.given;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.mockito.BDDMockito.mock;
|
||||
import static org.mockito.BDDMockito.verify;
|
||||
|
||||
/**
|
||||
* Tests for {@link JdbcUserDetailsManager}
|
||||
@ -373,14 +372,14 @@ public class JdbcUserDetailsManagerTests {
|
||||
@Test
|
||||
public void setUserDetailsMapperWithNullMapperThrowsException() {
|
||||
assertThatExceptionOfType(IllegalArgumentException.class)
|
||||
.isThrownBy(() -> this.manager.setUserDetailsMapper(null))
|
||||
.withMessage("userDetailsMapper cannot be null");
|
||||
.isThrownBy(() -> this.manager.setUserDetailsMapper(null))
|
||||
.withMessage("userDetailsMapper cannot be null");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setUserDetailsMapperWithMockMapper() throws SQLException {
|
||||
RowMapper<UserDetails> mockMapper = mock(RowMapper.class);
|
||||
when(mockMapper.mapRow(any(), anyInt())).thenReturn(joe);
|
||||
given(mockMapper.mapRow(any(), anyInt())).willReturn(joe);
|
||||
this.manager.setUserDetailsMapper(mockMapper);
|
||||
insertJoe();
|
||||
UserDetails newJoe = this.manager.loadUserByUsername("joe");
|
||||
@ -388,6 +387,24 @@ public class JdbcUserDetailsManagerTests {
|
||||
verify(mockMapper).mapRow(any(), anyInt());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setGrantedAuthorityMapperWithNullMapperThrowsException() {
|
||||
assertThatExceptionOfType(IllegalArgumentException.class)
|
||||
.isThrownBy(() -> this.manager.setGrantedAuthorityMapper(null))
|
||||
.withMessage("grantedAuthorityMapper cannot be null");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setGrantedAuthorityMapperWithMockMapper() throws SQLException {
|
||||
RowMapper<GrantedAuthority> mockMapper = mock(RowMapper.class);
|
||||
GrantedAuthority mockAuthority = new SimpleGrantedAuthority("ROLE_MOCK");
|
||||
given(mockMapper.mapRow(any(), anyInt())).willReturn(mockAuthority);
|
||||
this.manager.setGrantedAuthorityMapper(mockMapper);
|
||||
List<GrantedAuthority> authGroup = this.manager.findGroupAuthorities("GROUP_0");
|
||||
assertThat(authGroup.get(0)).isEqualTo(mockAuthority);
|
||||
verify(mockMapper).mapRow(any(), anyInt());
|
||||
}
|
||||
|
||||
private Authentication authenticateJoe() {
|
||||
UsernamePasswordAuthenticationToken auth = UsernamePasswordAuthenticationToken.authenticated("joe", "password",
|
||||
joe.getAuthorities());
|
||||
|
Loading…
x
Reference in New Issue
Block a user