|
@@ -16,17 +16,19 @@
|
|
|
|
|
|
package org.springframework.security.authentication;
|
|
|
|
|
|
-import static org.assertj.core.api.Assertions.*;
|
|
|
-import static org.mockito.Mockito.*;
|
|
|
+import org.junit.Test;
|
|
|
+import org.springframework.context.MessageSource;
|
|
|
+import org.springframework.security.core.Authentication;
|
|
|
+import org.springframework.security.core.AuthenticationException;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
|
+import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
|
|
|
-import org.junit.Test;
|
|
|
-import org.springframework.context.MessageSource;
|
|
|
-import org.springframework.security.core.Authentication;
|
|
|
-import org.springframework.security.core.AuthenticationException;
|
|
|
+import static org.assertj.core.api.Assertions.assertThat;
|
|
|
+import static org.assertj.core.api.Assertions.fail;
|
|
|
+import static org.mockito.Mockito.*;
|
|
|
|
|
|
/**
|
|
|
* Tests {@link ProviderManager}.
|
|
@@ -257,7 +259,6 @@ public class ProviderManagerTests {
|
|
|
catch (BadCredentialsException e) {
|
|
|
assertThat(e).isSameAs(expected);
|
|
|
}
|
|
|
- verify(publisher).publishAuthenticationFailure(expected, authReq);
|
|
|
}
|
|
|
|
|
|
@Test
|
|
@@ -298,6 +299,32 @@ public class ProviderManagerTests {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // gh-6281
|
|
|
+ @Test
|
|
|
+ public void authenticateWhenFailsInParentAndPublishesThenChildDoesNotPublish() {
|
|
|
+ BadCredentialsException badCredentialsExParent = new BadCredentialsException("Bad Credentials in parent");
|
|
|
+ ProviderManager parentMgr = new ProviderManager(
|
|
|
+ Collections.singletonList(createProviderWhichThrows(badCredentialsExParent)));
|
|
|
+ ProviderManager childMgr = new ProviderManager(Collections.singletonList(createProviderWhichThrows(
|
|
|
+ new BadCredentialsException("Bad Credentials in child"))), parentMgr);
|
|
|
+
|
|
|
+ AuthenticationEventPublisher publisher = mock(AuthenticationEventPublisher.class);
|
|
|
+ parentMgr.setAuthenticationEventPublisher(publisher);
|
|
|
+ childMgr.setAuthenticationEventPublisher(publisher);
|
|
|
+
|
|
|
+ final Authentication authReq = mock(Authentication.class);
|
|
|
+
|
|
|
+ try {
|
|
|
+ childMgr.authenticate(authReq);
|
|
|
+ fail("Expected exception");
|
|
|
+ }
|
|
|
+ catch (BadCredentialsException e) {
|
|
|
+ assertThat(e).isSameAs(badCredentialsExParent);
|
|
|
+ }
|
|
|
+ verify(publisher).publishAuthenticationFailure(badCredentialsExParent, authReq); // Parent publishes
|
|
|
+ verifyNoMoreInteractions(publisher); // Child should not publish (duplicate event)
|
|
|
+ }
|
|
|
+
|
|
|
private AuthenticationProvider createProviderWhichThrows(
|
|
|
final AuthenticationException e) {
|
|
|
AuthenticationProvider provider = mock(AuthenticationProvider.class);
|