diff --git a/core/src/main/java/org/acegisecurity/providers/dao/AbstractUserDetailsAuthenticationProvider.java b/core/src/main/java/org/acegisecurity/providers/dao/AbstractUserDetailsAuthenticationProvider.java index 11772b5762..ae109ed193 100644 --- a/core/src/main/java/org/acegisecurity/providers/dao/AbstractUserDetailsAuthenticationProvider.java +++ b/core/src/main/java/org/acegisecurity/providers/dao/AbstractUserDetailsAuthenticationProvider.java @@ -145,10 +145,15 @@ public abstract class AbstractUserDetailsAuthenticationProvider implements Authe try { additionalAuthenticationChecks(user, (UsernamePasswordAuthenticationToken) authentication); } catch (AuthenticationException exception) { - // There was a problem, so try again after checking we're using latest data - cacheWasUsed = false; - user = retrieveUser(username, (UsernamePasswordAuthenticationToken) authentication); - additionalAuthenticationChecks(user, (UsernamePasswordAuthenticationToken) authentication); + if(cacheWasUsed) { + // There was a problem, so try again after checking + // we're using latest data (ie not from the cache) + cacheWasUsed = false; + user = retrieveUser(username, (UsernamePasswordAuthenticationToken) authentication); + additionalAuthenticationChecks(user, (UsernamePasswordAuthenticationToken) authentication); + } else { + throw exception; + } } if (!user.isCredentialsNonExpired()) {