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<UserDetails> userDetailsMapper = this::mapToUser;
|
||||||
|
|
||||||
|
private RowMapper<GrantedAuthority> grantedAuthorityMapper = this::mapToGrantedAuthority;
|
||||||
|
|
||||||
public JdbcUserDetailsManager() {
|
public JdbcUserDetailsManager() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,6 +184,21 @@ public class JdbcUserDetailsManager extends JdbcDaoImpl implements UserDetailsMa
|
|||||||
this.userDetailsMapper = mapper;
|
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
|
@Override
|
||||||
protected void initDao() throws ApplicationContextException {
|
protected void initDao() throws ApplicationContextException {
|
||||||
if (this.authenticationManager == null) {
|
if (this.authenticationManager == null) {
|
||||||
@ -197,7 +214,7 @@ public class JdbcUserDetailsManager extends JdbcDaoImpl implements UserDetailsMa
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected List<UserDetails> loadUsersByUsername(String username) {
|
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 {
|
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 + "'");
|
this.logger.debug("Loading authorities for group '" + groupName + "'");
|
||||||
Assert.hasText(groupName, "groupName should have text");
|
Assert.hasText(groupName, "groupName should have text");
|
||||||
return getJdbcTemplate().query(this.groupAuthoritiesSql, new String[] { groupName },
|
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);
|
String roleName = getRolePrefix() + rs.getString(3);
|
||||||
return new SimpleGrantedAuthority(roleName);
|
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.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.BDDMockito.given;
|
import static org.mockito.BDDMockito.given;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.BDDMockito.mock;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.BDDMockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for {@link JdbcUserDetailsManager}
|
* Tests for {@link JdbcUserDetailsManager}
|
||||||
@ -373,14 +372,14 @@ public class JdbcUserDetailsManagerTests {
|
|||||||
@Test
|
@Test
|
||||||
public void setUserDetailsMapperWithNullMapperThrowsException() {
|
public void setUserDetailsMapperWithNullMapperThrowsException() {
|
||||||
assertThatExceptionOfType(IllegalArgumentException.class)
|
assertThatExceptionOfType(IllegalArgumentException.class)
|
||||||
.isThrownBy(() -> this.manager.setUserDetailsMapper(null))
|
.isThrownBy(() -> this.manager.setUserDetailsMapper(null))
|
||||||
.withMessage("userDetailsMapper cannot be null");
|
.withMessage("userDetailsMapper cannot be null");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setUserDetailsMapperWithMockMapper() throws SQLException {
|
public void setUserDetailsMapperWithMockMapper() throws SQLException {
|
||||||
RowMapper<UserDetails> mockMapper = mock(RowMapper.class);
|
RowMapper<UserDetails> mockMapper = mock(RowMapper.class);
|
||||||
when(mockMapper.mapRow(any(), anyInt())).thenReturn(joe);
|
given(mockMapper.mapRow(any(), anyInt())).willReturn(joe);
|
||||||
this.manager.setUserDetailsMapper(mockMapper);
|
this.manager.setUserDetailsMapper(mockMapper);
|
||||||
insertJoe();
|
insertJoe();
|
||||||
UserDetails newJoe = this.manager.loadUserByUsername("joe");
|
UserDetails newJoe = this.manager.loadUserByUsername("joe");
|
||||||
@ -388,6 +387,24 @@ public class JdbcUserDetailsManagerTests {
|
|||||||
verify(mockMapper).mapRow(any(), anyInt());
|
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() {
|
private Authentication authenticateJoe() {
|
||||||
UsernamePasswordAuthenticationToken auth = UsernamePasswordAuthenticationToken.authenticated("joe", "password",
|
UsernamePasswordAuthenticationToken auth = UsernamePasswordAuthenticationToken.authenticated("joe", "password",
|
||||||
joe.getAuthorities());
|
joe.getAuthorities());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user