Skip to content

Commit 6ba225b

Browse files
committed
Polish userNotFoundEncodedPassword
Ensure that if passwordEncoder is set that userNotFoundEncodedPassword is encoded again if already set. Issue: gh-4915
1 parent fd78d05 commit 6ba225b

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

Diff for: core/src/main/java/org/springframework/security/authentication/dao/DaoAuthenticationProvider.java

+1
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ private void mitigateAgainstTimingAttack(UsernamePasswordAuthenticationToken aut
149149
public void setPasswordEncoder(PasswordEncoder passwordEncoder) {
150150
Assert.notNull(passwordEncoder, "passwordEncoder cannot be null");
151151
this.passwordEncoder = passwordEncoder;
152+
this.userNotFoundEncodedPassword = null;
152153
}
153154

154155
protected PasswordEncoder getPasswordEncoder() {

Diff for: core/src/test/java/org/springframework/security/authentication/dao/DaoAuthenticationProviderTests.java

+30
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import org.springframework.security.core.userdetails.cache.EhCacheBasedUserCache;
5151
import org.springframework.security.core.userdetails.cache.NullUserCache;
5252
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
53+
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
5354
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
5455
import org.springframework.security.crypto.password.PasswordEncoder;
5556

@@ -280,6 +281,35 @@ public void testAuthenticateFailsWithInvalidUsernameAndHideUserNotFoundException
280281
}
281282
}
282283

284+
@Test
285+
public void testAuthenticateFailsWithInvalidUsernameAndChangePasswordEncoder() {
286+
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
287+
"INVALID_USER", "koala");
288+
289+
DaoAuthenticationProvider provider = createProvider();
290+
assertThat(provider.isHideUserNotFoundExceptions()).isTrue();
291+
provider.setUserDetailsService(new MockAuthenticationDaoUserrod());
292+
provider.setUserCache(new MockUserCache());
293+
294+
try {
295+
provider.authenticate(token);
296+
fail("Should have thrown BadCredentialsException");
297+
}
298+
catch (BadCredentialsException expected) {
299+
300+
}
301+
302+
provider.setPasswordEncoder(PasswordEncoderFactories.createDelegatingPasswordEncoder());
303+
304+
try {
305+
provider.authenticate(token);
306+
fail("Should have thrown BadCredentialsException");
307+
}
308+
catch (BadCredentialsException expected) {
309+
310+
}
311+
}
312+
283313
@Test
284314
public void testAuthenticateFailsWithMixedCaseUsernameIfDefaultChanged() {
285315
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(

0 commit comments

Comments
 (0)