ProviderManager Uses CollectionUtils#contains

Closes gh-8689
This commit is contained in:
yukihane 2020-06-16 19:22:29 +09:00 committed by Josh Cummings
parent 27e1c582b9
commit 5302fb776c
No known key found for this signature in database
GPG Key ID: 49EF60DD7FF83443
2 changed files with 27 additions and 1 deletions

View File

@ -30,6 +30,7 @@ import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.CredentialsContainer;
import org.springframework.security.core.SpringSecurityMessageSource;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
/**
* Iterates an {@link Authentication} request through a list of
@ -145,7 +146,7 @@ public class ProviderManager implements AuthenticationManager, MessageSourceAwar
throw new IllegalArgumentException(
"A parent AuthenticationManager or a list "
+ "of AuthenticationProviders is required");
} else if (providers.contains(null)) {
} else if (CollectionUtils.contains(providers.iterator(), null)) {
throw new IllegalArgumentException(
"providers list cannot contain null values");
}

View File

@ -102,6 +102,31 @@ public class ProviderManagerTests {
new ProviderManager((AuthenticationProvider) null);
}
@Test(expected = IllegalArgumentException.class)
public void testStartupFailsIfProvidersContainNullElement() {
new ProviderManager(Arrays.asList(mock(AuthenticationProvider.class), null));
}
@Test
public void testUsingNullNotPermittedList() {
// imitated Java9 List.of(e) object, which disallows null elements and
// throws NPE when contains(null) called
List<AuthenticationProvider> providers = new ArrayList<AuthenticationProvider>() {
private static final long serialVersionUID = 1L;
@Override
public boolean contains(Object o) {
if (o == null) {
throw new NullPointerException();
}
return super.contains(o);
}
};
providers.add(mock(AuthenticationProvider.class));
new ProviderManager(providers);
}
@Test
public void detailsAreNotSetOnAuthenticationTokenIfAlreadySetByProvider() {
Object requestDetails = "(Request Details)";