|
|
@ -80,8 +80,7 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
public void testAuthenticateFailsForIncorrectPasswordCase() {
|
|
|
|
public void testAuthenticateFailsForIncorrectPasswordCase() {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("rod", "KOala");
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("rod", "KOala");
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceUserRod());
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserRod());
|
|
|
|
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
assertThatExceptionOfType(BadCredentialsException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
assertThatExceptionOfType(BadCredentialsException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -89,8 +88,7 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
public void testReceivedBadCredentialsWhenCredentialsNotProvided() {
|
|
|
|
public void testReceivedBadCredentialsWhenCredentialsNotProvided() {
|
|
|
|
// Test related to SEC-434
|
|
|
|
// Test related to SEC-434
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceUserRod());
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserRod());
|
|
|
|
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
UsernamePasswordAuthenticationToken authenticationToken = UsernamePasswordAuthenticationToken
|
|
|
|
UsernamePasswordAuthenticationToken authenticationToken = UsernamePasswordAuthenticationToken
|
|
|
|
.unauthenticated("rod", null);
|
|
|
|
.unauthenticated("rod", null);
|
|
|
@ -102,8 +100,7 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
public void testAuthenticateFailsIfAccountExpired() {
|
|
|
|
public void testAuthenticateFailsIfAccountExpired() {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("peter",
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("peter",
|
|
|
|
"opal");
|
|
|
|
"opal");
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceUserPeterAccountExpired());
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserPeterAccountExpired());
|
|
|
|
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
assertThatExceptionOfType(AccountExpiredException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
assertThatExceptionOfType(AccountExpiredException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -112,16 +109,14 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
public void testAuthenticateFailsIfAccountLocked() {
|
|
|
|
public void testAuthenticateFailsIfAccountLocked() {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("peter",
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("peter",
|
|
|
|
"opal");
|
|
|
|
"opal");
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceUserPeterAccountLocked());
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserPeterAccountLocked());
|
|
|
|
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
assertThatExceptionOfType(LockedException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
assertThatExceptionOfType(LockedException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
public void testAuthenticateFailsIfCredentialsExpired() {
|
|
|
|
public void testAuthenticateFailsIfCredentialsExpired() {
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceUserPeterCredentialsExpired());
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserPeterCredentialsExpired());
|
|
|
|
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
assertThatExceptionOfType(CredentialsExpiredException.class).isThrownBy(
|
|
|
|
assertThatExceptionOfType(CredentialsExpiredException.class).isThrownBy(
|
|
|
|
() -> provider.authenticate(UsernamePasswordAuthenticationToken.unauthenticated("peter", "opal")));
|
|
|
|
() -> provider.authenticate(UsernamePasswordAuthenticationToken.unauthenticated("peter", "opal")));
|
|
|
@ -135,8 +130,7 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
public void testAuthenticateFailsIfUserDisabled() {
|
|
|
|
public void testAuthenticateFailsIfUserDisabled() {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("peter",
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("peter",
|
|
|
|
"opal");
|
|
|
|
"opal");
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceUserPeter());
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserPeter());
|
|
|
|
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
assertThatExceptionOfType(DisabledException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
assertThatExceptionOfType(DisabledException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -144,8 +138,7 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
public void testAuthenticateFailsWhenAuthenticationDaoHasBackendFailure() {
|
|
|
|
public void testAuthenticateFailsWhenAuthenticationDaoHasBackendFailure() {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("rod", "koala");
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("rod", "koala");
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceSimulateBackendError());
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceSimulateBackendError());
|
|
|
|
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
assertThatExceptionOfType(InternalAuthenticationServiceException.class)
|
|
|
|
assertThatExceptionOfType(InternalAuthenticationServiceException.class)
|
|
|
|
.isThrownBy(() -> provider.authenticate(token));
|
|
|
|
.isThrownBy(() -> provider.authenticate(token));
|
|
|
@ -154,8 +147,7 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
public void testAuthenticateFailsWithEmptyUsername() {
|
|
|
|
public void testAuthenticateFailsWithEmptyUsername() {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated(null, "koala");
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated(null, "koala");
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceUserRod());
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserRod());
|
|
|
|
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
assertThatExceptionOfType(BadCredentialsException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
assertThatExceptionOfType(BadCredentialsException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -164,8 +156,7 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
public void testAuthenticateFailsWithInvalidPassword() {
|
|
|
|
public void testAuthenticateFailsWithInvalidPassword() {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("rod",
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("rod",
|
|
|
|
"INVALID_PASSWORD");
|
|
|
|
"INVALID_PASSWORD");
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceUserRod());
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserRod());
|
|
|
|
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
assertThatExceptionOfType(BadCredentialsException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
assertThatExceptionOfType(BadCredentialsException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -174,10 +165,9 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
public void testAuthenticateFailsWithInvalidUsernameAndHideUserNotFoundExceptionFalse() {
|
|
|
|
public void testAuthenticateFailsWithInvalidUsernameAndHideUserNotFoundExceptionFalse() {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("INVALID_USER",
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("INVALID_USER",
|
|
|
|
"koala");
|
|
|
|
"koala");
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceUserRod());
|
|
|
|
provider.setHideUserNotFoundExceptions(false); // we want
|
|
|
|
provider.setHideUserNotFoundExceptions(false); // we want
|
|
|
|
// UsernameNotFoundExceptions
|
|
|
|
// UsernameNotFoundExceptions
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserRod());
|
|
|
|
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
assertThatExceptionOfType(UsernameNotFoundException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
assertThatExceptionOfType(UsernameNotFoundException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -186,9 +176,8 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
public void testAuthenticateFailsWithInvalidUsernameAndHideUserNotFoundExceptionsWithDefaultOfTrue() {
|
|
|
|
public void testAuthenticateFailsWithInvalidUsernameAndHideUserNotFoundExceptionsWithDefaultOfTrue() {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("INVALID_USER",
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("INVALID_USER",
|
|
|
|
"koala");
|
|
|
|
"koala");
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
assertThat(createProvider(null).isHideUserNotFoundExceptions()).isTrue();
|
|
|
|
assertThat(provider.isHideUserNotFoundExceptions()).isTrue();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceUserRod());
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserRod());
|
|
|
|
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
assertThatExceptionOfType(BadCredentialsException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
assertThatExceptionOfType(BadCredentialsException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -197,9 +186,8 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
public void testAuthenticateFailsWithInvalidUsernameAndChangePasswordEncoder() {
|
|
|
|
public void testAuthenticateFailsWithInvalidUsernameAndChangePasswordEncoder() {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("INVALID_USER",
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("INVALID_USER",
|
|
|
|
"koala");
|
|
|
|
"koala");
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
assertThat(createProvider(null).isHideUserNotFoundExceptions()).isTrue();
|
|
|
|
assertThat(provider.isHideUserNotFoundExceptions()).isTrue();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceUserRod());
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserRod());
|
|
|
|
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
assertThatExceptionOfType(BadCredentialsException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
assertThatExceptionOfType(BadCredentialsException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
provider.setPasswordEncoder(PasswordEncoderFactories.createDelegatingPasswordEncoder());
|
|
|
|
provider.setPasswordEncoder(PasswordEncoderFactories.createDelegatingPasswordEncoder());
|
|
|
@ -209,8 +197,7 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
public void testAuthenticateFailsWithMixedCaseUsernameIfDefaultChanged() {
|
|
|
|
public void testAuthenticateFailsWithMixedCaseUsernameIfDefaultChanged() {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("RoD", "koala");
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("RoD", "koala");
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceUserRod());
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserRod());
|
|
|
|
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
assertThatExceptionOfType(BadCredentialsException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
assertThatExceptionOfType(BadCredentialsException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -219,8 +206,7 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
public void testAuthenticates() {
|
|
|
|
public void testAuthenticates() {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("rod", "koala");
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("rod", "koala");
|
|
|
|
token.setDetails("192.168.0.1");
|
|
|
|
token.setDetails("192.168.0.1");
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceUserRod());
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserRod());
|
|
|
|
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
Authentication result = provider.authenticate(token);
|
|
|
|
Authentication result = provider.authenticate(token);
|
|
|
|
if (!(result instanceof UsernamePasswordAuthenticationToken)) {
|
|
|
|
if (!(result instanceof UsernamePasswordAuthenticationToken)) {
|
|
|
@ -236,8 +222,7 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
public void testAuthenticatesASecondTime() {
|
|
|
|
public void testAuthenticatesASecondTime() {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("rod", "koala");
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("rod", "koala");
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceUserRod());
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserRod());
|
|
|
|
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
Authentication result = provider.authenticate(token);
|
|
|
|
Authentication result = provider.authenticate(token);
|
|
|
|
if (!(result instanceof UsernamePasswordAuthenticationToken)) {
|
|
|
|
if (!(result instanceof UsernamePasswordAuthenticationToken)) {
|
|
|
@ -254,8 +239,7 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
public void testAuthenticatesWithForcePrincipalAsString() {
|
|
|
|
public void testAuthenticatesWithForcePrincipalAsString() {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("rod", "koala");
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("rod", "koala");
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceUserRod());
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserRod());
|
|
|
|
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
provider.setForcePrincipalAsString(true);
|
|
|
|
provider.setForcePrincipalAsString(true);
|
|
|
|
Authentication result = provider.authenticate(token);
|
|
|
|
Authentication result = provider.authenticate(token);
|
|
|
@ -276,9 +260,8 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
PasswordEncoder encoder = mock(PasswordEncoder.class);
|
|
|
|
PasswordEncoder encoder = mock(PasswordEncoder.class);
|
|
|
|
UserDetailsService userDetailsService = mock(UserDetailsService.class);
|
|
|
|
UserDetailsService userDetailsService = mock(UserDetailsService.class);
|
|
|
|
UserDetailsPasswordService passwordManager = mock(UserDetailsPasswordService.class);
|
|
|
|
UserDetailsPasswordService passwordManager = mock(UserDetailsPasswordService.class);
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider(userDetailsService);
|
|
|
|
provider.setPasswordEncoder(encoder);
|
|
|
|
provider.setPasswordEncoder(encoder);
|
|
|
|
provider.setUserDetailsService(userDetailsService);
|
|
|
|
|
|
|
|
provider.setUserDetailsPasswordService(passwordManager);
|
|
|
|
provider.setUserDetailsPasswordService(passwordManager);
|
|
|
|
UserDetails user = PasswordEncodedUser.user();
|
|
|
|
UserDetails user = PasswordEncodedUser.user();
|
|
|
|
given(encoder.matches(any(), any())).willReturn(true);
|
|
|
|
given(encoder.matches(any(), any())).willReturn(true);
|
|
|
@ -298,9 +281,8 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
PasswordEncoder encoder = mock(PasswordEncoder.class);
|
|
|
|
PasswordEncoder encoder = mock(PasswordEncoder.class);
|
|
|
|
UserDetailsService userDetailsService = mock(UserDetailsService.class);
|
|
|
|
UserDetailsService userDetailsService = mock(UserDetailsService.class);
|
|
|
|
UserDetailsPasswordService passwordManager = mock(UserDetailsPasswordService.class);
|
|
|
|
UserDetailsPasswordService passwordManager = mock(UserDetailsPasswordService.class);
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider(userDetailsService);
|
|
|
|
provider.setPasswordEncoder(encoder);
|
|
|
|
provider.setPasswordEncoder(encoder);
|
|
|
|
provider.setUserDetailsService(userDetailsService);
|
|
|
|
|
|
|
|
provider.setUserDetailsPasswordService(passwordManager);
|
|
|
|
provider.setUserDetailsPasswordService(passwordManager);
|
|
|
|
UserDetails user = PasswordEncodedUser.user();
|
|
|
|
UserDetails user = PasswordEncodedUser.user();
|
|
|
|
given(encoder.matches(any(), any())).willReturn(false);
|
|
|
|
given(encoder.matches(any(), any())).willReturn(false);
|
|
|
@ -316,9 +298,8 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
PasswordEncoder encoder = mock(PasswordEncoder.class);
|
|
|
|
PasswordEncoder encoder = mock(PasswordEncoder.class);
|
|
|
|
UserDetailsService userDetailsService = mock(UserDetailsService.class);
|
|
|
|
UserDetailsService userDetailsService = mock(UserDetailsService.class);
|
|
|
|
UserDetailsPasswordService passwordManager = mock(UserDetailsPasswordService.class);
|
|
|
|
UserDetailsPasswordService passwordManager = mock(UserDetailsPasswordService.class);
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider(userDetailsService);
|
|
|
|
provider.setPasswordEncoder(encoder);
|
|
|
|
provider.setPasswordEncoder(encoder);
|
|
|
|
provider.setUserDetailsService(userDetailsService);
|
|
|
|
|
|
|
|
provider.setUserDetailsPasswordService(passwordManager);
|
|
|
|
provider.setUserDetailsPasswordService(passwordManager);
|
|
|
|
UserDetails user = PasswordEncodedUser.user();
|
|
|
|
UserDetails user = PasswordEncodedUser.user();
|
|
|
|
given(encoder.matches(any(), any())).willReturn(true);
|
|
|
|
given(encoder.matches(any(), any())).willReturn(true);
|
|
|
@ -331,15 +312,14 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
public void testDetectsNullBeingReturnedFromAuthenticationDao() {
|
|
|
|
public void testDetectsNullBeingReturnedFromAuthenticationDao() {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("rod", "koala");
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("rod", "koala");
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceReturnsNull());
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceReturnsNull());
|
|
|
|
|
|
|
|
assertThatExceptionOfType(AuthenticationServiceException.class).isThrownBy(() -> provider.authenticate(token))
|
|
|
|
assertThatExceptionOfType(AuthenticationServiceException.class).isThrownBy(() -> provider.authenticate(token))
|
|
|
|
.withMessage("UserDetailsService returned null, which is an interface contract violation");
|
|
|
|
.withMessage("UserDetailsService returned null, which is an interface contract violation");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
public void testGettersSetters() {
|
|
|
|
public void testGettersSetters() {
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider(null);
|
|
|
|
provider.setPasswordEncoder(new BCryptPasswordEncoder());
|
|
|
|
provider.setPasswordEncoder(new BCryptPasswordEncoder());
|
|
|
|
assertThat(provider.getPasswordEncoder().getClass()).isEqualTo(BCryptPasswordEncoder.class);
|
|
|
|
assertThat(provider.getPasswordEncoder().getClass()).isEqualTo(BCryptPasswordEncoder.class);
|
|
|
|
provider.setUserCache(new SpringCacheBasedUserCache(mock(Cache.class)));
|
|
|
|
provider.setUserCache(new SpringCacheBasedUserCache(mock(Cache.class)));
|
|
|
@ -354,8 +334,7 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("rod", "koala");
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("rod", "koala");
|
|
|
|
MockUserDetailsServiceUserRod authenticationDao = new MockUserDetailsServiceUserRod();
|
|
|
|
MockUserDetailsServiceUserRod authenticationDao = new MockUserDetailsServiceUserRod();
|
|
|
|
MockUserCache cache = new MockUserCache();
|
|
|
|
MockUserCache cache = new MockUserCache();
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(authenticationDao);
|
|
|
|
provider.setUserDetailsService(authenticationDao);
|
|
|
|
|
|
|
|
provider.setUserCache(cache);
|
|
|
|
provider.setUserCache(cache);
|
|
|
|
// This will work, as password still "koala"
|
|
|
|
// This will work, as password still "koala"
|
|
|
|
provider.authenticate(token);
|
|
|
|
provider.authenticate(token);
|
|
|
@ -373,14 +352,13 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
public void testStartupFailsIfNoAuthenticationDao() throws Exception {
|
|
|
|
public void testStartupFailsIfNoAuthenticationDao() throws Exception {
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider(null);
|
|
|
|
assertThatIllegalArgumentException().isThrownBy(provider::afterPropertiesSet);
|
|
|
|
assertThatIllegalArgumentException().isThrownBy(provider::afterPropertiesSet);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
public void testStartupFailsIfNoUserCacheSet() throws Exception {
|
|
|
|
public void testStartupFailsIfNoUserCacheSet() throws Exception {
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceUserRod());
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserRod());
|
|
|
|
|
|
|
|
assertThat(provider.getUserCache().getClass()).isEqualTo(NullUserCache.class);
|
|
|
|
assertThat(provider.getUserCache().getClass()).isEqualTo(NullUserCache.class);
|
|
|
|
provider.setUserCache(null);
|
|
|
|
provider.setUserCache(null);
|
|
|
|
assertThatIllegalArgumentException().isThrownBy(provider::afterPropertiesSet);
|
|
|
|
assertThatIllegalArgumentException().isThrownBy(provider::afterPropertiesSet);
|
|
|
@ -388,9 +366,8 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
public void testStartupSuccess() throws Exception {
|
|
|
|
public void testStartupSuccess() throws Exception {
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
|
|
|
|
UserDetailsService userDetailsService = new MockUserDetailsServiceUserRod();
|
|
|
|
UserDetailsService userDetailsService = new MockUserDetailsServiceUserRod();
|
|
|
|
provider.setUserDetailsService(userDetailsService);
|
|
|
|
DaoAuthenticationProvider provider = createProvider(userDetailsService);
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
provider.setUserCache(new MockUserCache());
|
|
|
|
assertThat(provider.getUserDetailsService()).isEqualTo(userDetailsService);
|
|
|
|
assertThat(provider.getUserDetailsService()).isEqualTo(userDetailsService);
|
|
|
|
provider.afterPropertiesSet();
|
|
|
|
provider.afterPropertiesSet();
|
|
|
@ -398,7 +375,7 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
public void testSupports() {
|
|
|
|
public void testSupports() {
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(null);
|
|
|
|
assertThat(provider.supports(UsernamePasswordAuthenticationToken.class)).isTrue();
|
|
|
|
assertThat(provider.supports(UsernamePasswordAuthenticationToken.class)).isTrue();
|
|
|
|
assertThat(!provider.supports(TestingAuthenticationToken.class)).isTrue();
|
|
|
|
assertThat(!provider.supports(TestingAuthenticationToken.class)).isTrue();
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -410,10 +387,9 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
"koala");
|
|
|
|
"koala");
|
|
|
|
PasswordEncoder encoder = mock(PasswordEncoder.class);
|
|
|
|
PasswordEncoder encoder = mock(PasswordEncoder.class);
|
|
|
|
given(encoder.encode(anyString())).willReturn("koala");
|
|
|
|
given(encoder.encode(anyString())).willReturn("koala");
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider(new MockUserDetailsServiceUserRod());
|
|
|
|
provider.setHideUserNotFoundExceptions(false);
|
|
|
|
provider.setHideUserNotFoundExceptions(false);
|
|
|
|
provider.setPasswordEncoder(encoder);
|
|
|
|
provider.setPasswordEncoder(encoder);
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserRod());
|
|
|
|
|
|
|
|
provider.afterPropertiesSet();
|
|
|
|
provider.afterPropertiesSet();
|
|
|
|
assertThatExceptionOfType(UsernameNotFoundException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
assertThatExceptionOfType(UsernameNotFoundException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
// ensure encoder invoked w/ non-null strings since PasswordEncoder impls may fail
|
|
|
|
// ensure encoder invoked w/ non-null strings since PasswordEncoder impls may fail
|
|
|
@ -426,12 +402,11 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("missing",
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("missing",
|
|
|
|
"koala");
|
|
|
|
"koala");
|
|
|
|
PasswordEncoder encoder = new BCryptPasswordEncoder();
|
|
|
|
PasswordEncoder encoder = new BCryptPasswordEncoder();
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
|
|
|
|
|
|
|
|
provider.setHideUserNotFoundExceptions(false);
|
|
|
|
|
|
|
|
provider.setPasswordEncoder(encoder);
|
|
|
|
|
|
|
|
MockUserDetailsServiceUserRod userDetailsService = new MockUserDetailsServiceUserRod();
|
|
|
|
MockUserDetailsServiceUserRod userDetailsService = new MockUserDetailsServiceUserRod();
|
|
|
|
userDetailsService.password = encoder.encode((CharSequence) token.getCredentials());
|
|
|
|
userDetailsService.password = encoder.encode((CharSequence) token.getCredentials());
|
|
|
|
provider.setUserDetailsService(userDetailsService);
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider(userDetailsService);
|
|
|
|
|
|
|
|
provider.setHideUserNotFoundExceptions(false);
|
|
|
|
|
|
|
|
provider.setPasswordEncoder(encoder);
|
|
|
|
assertThatExceptionOfType(UsernameNotFoundException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
assertThatExceptionOfType(UsernameNotFoundException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -439,16 +414,15 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
public void testUserNotFoundDefaultEncoder() {
|
|
|
|
public void testUserNotFoundDefaultEncoder() {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("missing",
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("missing",
|
|
|
|
null);
|
|
|
|
null);
|
|
|
|
DaoAuthenticationProvider provider = createProvider();
|
|
|
|
DaoAuthenticationProvider provider = createProvider(new MockUserDetailsServiceUserRod());
|
|
|
|
provider.setHideUserNotFoundExceptions(false);
|
|
|
|
provider.setHideUserNotFoundExceptions(false);
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserRod());
|
|
|
|
|
|
|
|
assertThatExceptionOfType(UsernameNotFoundException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
assertThatExceptionOfType(UsernameNotFoundException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
public void constructWhenPasswordEncoderProvidedThenSets() {
|
|
|
|
public void constructWhenPasswordEncoderProvidedThenSets() {
|
|
|
|
DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider(
|
|
|
|
DaoAuthenticationProvider daoAuthenticationProvider = createProvider(null);
|
|
|
|
NoOpPasswordEncoder.getInstance());
|
|
|
|
daoAuthenticationProvider.setPasswordEncoder(NoOpPasswordEncoder.getInstance());
|
|
|
|
assertThat(daoAuthenticationProvider.getPasswordEncoder()).isSameAs(NoOpPasswordEncoder.getInstance());
|
|
|
|
assertThat(daoAuthenticationProvider.getPasswordEncoder()).isSameAs(NoOpPasswordEncoder.getInstance());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -463,12 +437,11 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
UsernamePasswordAuthenticationToken notFoundUser = UsernamePasswordAuthenticationToken
|
|
|
|
UsernamePasswordAuthenticationToken notFoundUser = UsernamePasswordAuthenticationToken
|
|
|
|
.unauthenticated("notFound", "koala");
|
|
|
|
.unauthenticated("notFound", "koala");
|
|
|
|
PasswordEncoder encoder = new BCryptPasswordEncoder(10, new SecureRandom());
|
|
|
|
PasswordEncoder encoder = new BCryptPasswordEncoder(10, new SecureRandom());
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
|
|
|
|
|
|
|
|
provider.setHideUserNotFoundExceptions(false);
|
|
|
|
|
|
|
|
provider.setPasswordEncoder(encoder);
|
|
|
|
|
|
|
|
MockUserDetailsServiceUserRod userDetailsService = new MockUserDetailsServiceUserRod();
|
|
|
|
MockUserDetailsServiceUserRod userDetailsService = new MockUserDetailsServiceUserRod();
|
|
|
|
userDetailsService.password = encoder.encode((CharSequence) foundUser.getCredentials());
|
|
|
|
userDetailsService.password = encoder.encode((CharSequence) foundUser.getCredentials());
|
|
|
|
provider.setUserDetailsService(userDetailsService);
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider(userDetailsService);
|
|
|
|
|
|
|
|
provider.setHideUserNotFoundExceptions(false);
|
|
|
|
|
|
|
|
provider.setPasswordEncoder(encoder);
|
|
|
|
int sampleSize = 100;
|
|
|
|
int sampleSize = 100;
|
|
|
|
List<Long> userFoundTimes = new ArrayList<>(sampleSize);
|
|
|
|
List<Long> userFoundTimes = new ArrayList<>(sampleSize);
|
|
|
|
for (int i = 0; i < sampleSize; i++) {
|
|
|
|
for (int i = 0; i < sampleSize; i++) {
|
|
|
@ -500,24 +473,22 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("missing",
|
|
|
|
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken.unauthenticated("missing",
|
|
|
|
null);
|
|
|
|
null);
|
|
|
|
PasswordEncoder encoder = mock(PasswordEncoder.class);
|
|
|
|
PasswordEncoder encoder = mock(PasswordEncoder.class);
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider(new MockUserDetailsServiceUserRod());
|
|
|
|
provider.setHideUserNotFoundExceptions(false);
|
|
|
|
provider.setHideUserNotFoundExceptions(false);
|
|
|
|
provider.setPasswordEncoder(encoder);
|
|
|
|
provider.setPasswordEncoder(encoder);
|
|
|
|
provider.setUserDetailsService(new MockUserDetailsServiceUserRod());
|
|
|
|
|
|
|
|
assertThatExceptionOfType(UsernameNotFoundException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
assertThatExceptionOfType(UsernameNotFoundException.class).isThrownBy(() -> provider.authenticate(token));
|
|
|
|
verify(encoder, times(0)).matches(anyString(), anyString());
|
|
|
|
verify(encoder, times(0)).matches(anyString(), anyString());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
void authenticateWhenPasswordLeakedThenException() {
|
|
|
|
void authenticateWhenPasswordLeakedThenException() {
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
|
|
|
|
|
|
|
|
provider.setPasswordEncoder(PasswordEncoderFactories.createDelegatingPasswordEncoder());
|
|
|
|
|
|
|
|
UserDetails user = User.withDefaultPasswordEncoder()
|
|
|
|
UserDetails user = User.withDefaultPasswordEncoder()
|
|
|
|
.username("user")
|
|
|
|
.username("user")
|
|
|
|
.password("password")
|
|
|
|
.password("password")
|
|
|
|
.roles("USER")
|
|
|
|
.roles("USER")
|
|
|
|
.build();
|
|
|
|
.build();
|
|
|
|
provider.setUserDetailsService(withUsers(user));
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider(withUsers(user));
|
|
|
|
|
|
|
|
provider.setPasswordEncoder(PasswordEncoderFactories.createDelegatingPasswordEncoder());
|
|
|
|
provider.setCompromisedPasswordChecker(new TestCompromisedPasswordChecker());
|
|
|
|
provider.setCompromisedPasswordChecker(new TestCompromisedPasswordChecker());
|
|
|
|
assertThatExceptionOfType(CompromisedPasswordException.class).isThrownBy(
|
|
|
|
assertThatExceptionOfType(CompromisedPasswordException.class).isThrownBy(
|
|
|
|
() -> provider.authenticate(UsernamePasswordAuthenticationToken.unauthenticated("user", "password")))
|
|
|
|
() -> provider.authenticate(UsernamePasswordAuthenticationToken.unauthenticated("user", "password")))
|
|
|
@ -526,14 +497,13 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
void authenticateWhenPasswordNotLeakedThenNoException() {
|
|
|
|
void authenticateWhenPasswordNotLeakedThenNoException() {
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
|
|
|
|
|
|
|
|
provider.setPasswordEncoder(PasswordEncoderFactories.createDelegatingPasswordEncoder());
|
|
|
|
|
|
|
|
UserDetails user = User.withDefaultPasswordEncoder()
|
|
|
|
UserDetails user = User.withDefaultPasswordEncoder()
|
|
|
|
.username("user")
|
|
|
|
.username("user")
|
|
|
|
.password("strongpassword")
|
|
|
|
.password("strongpassword")
|
|
|
|
.roles("USER")
|
|
|
|
.roles("USER")
|
|
|
|
.build();
|
|
|
|
.build();
|
|
|
|
provider.setUserDetailsService(withUsers(user));
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider(withUsers(user));
|
|
|
|
|
|
|
|
provider.setPasswordEncoder(PasswordEncoderFactories.createDelegatingPasswordEncoder());
|
|
|
|
provider.setCompromisedPasswordChecker(new TestCompromisedPasswordChecker());
|
|
|
|
provider.setCompromisedPasswordChecker(new TestCompromisedPasswordChecker());
|
|
|
|
Authentication authentication = provider
|
|
|
|
Authentication authentication = provider
|
|
|
|
.authenticate(UsernamePasswordAuthenticationToken.unauthenticated("user", "strongpassword"));
|
|
|
|
.authenticate(UsernamePasswordAuthenticationToken.unauthenticated("user", "strongpassword"));
|
|
|
@ -544,8 +514,8 @@ public class DaoAuthenticationProviderTests {
|
|
|
|
return new InMemoryUserDetailsManager(users);
|
|
|
|
return new InMemoryUserDetailsManager(users);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private DaoAuthenticationProvider createProvider() {
|
|
|
|
private DaoAuthenticationProvider createProvider(UserDetailsService userDetailsService) {
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
|
|
|
|
DaoAuthenticationProvider provider = new DaoAuthenticationProvider(userDetailsService);
|
|
|
|
provider.setPasswordEncoder(NoOpPasswordEncoder.getInstance());
|
|
|
|
provider.setPasswordEncoder(NoOpPasswordEncoder.getInstance());
|
|
|
|
return provider;
|
|
|
|
return provider;
|
|
|
|
}
|
|
|
|
}
|
|
|
|