diff --git a/core/src/main/java/org/springframework/security/providers/ProviderManager.java b/core/src/main/java/org/springframework/security/providers/ProviderManager.java index e8aa1d2d98..702f9130e3 100644 --- a/core/src/main/java/org/springframework/security/providers/ProviderManager.java +++ b/core/src/main/java/org/springframework/security/providers/ProviderManager.java @@ -86,7 +86,7 @@ import java.util.Properties; *
* The exception to this process is when a provider throws an {@link AccountStatusException} or if the configured * concurrent session controller throws a {@link ConcurrentLoginException}. In both these cases, no further providers - * in the list will be queried. + * in the list will be queried. * *
* If a valid Authentication is returned by an AuthenticationProvider, the
@@ -207,15 +207,18 @@ public class ProviderManager extends AbstractAuthenticationManager implements In
try {
result = provider.authenticate(authentication);
- copyDetails(authentication, result);
- sessionController.checkAuthenticationAllowed(result);
+
+ if (result != null) {
+ copyDetails(authentication, result);
+ sessionController.checkAuthenticationAllowed(result);
+ }
} catch (AuthenticationException ae) {
lastException = ae;
result = null;
}
// SEC-546: Avoid polling additional providers if auth failure is due to invalid account status or
- // disallowed concurrent login.
+ // disallowed concurrent login.
if (lastException instanceof AccountStatusException || lastException instanceof ConcurrentLoginException) {
break;
}