|
@@ -32,6 +32,7 @@ import org.junit.jupiter.api.Test;
|
|
|
|
|
|
import org.springframework.mock.web.MockHttpServletRequest;
|
|
|
import org.springframework.mock.web.MockHttpServletResponse;
|
|
|
+import org.springframework.security.MockSecurityContextHolderStrategy;
|
|
|
import org.springframework.security.authentication.TestingAuthenticationToken;
|
|
|
import org.springframework.security.core.Authentication;
|
|
|
import org.springframework.security.core.authority.AuthorityUtils;
|
|
@@ -46,6 +47,7 @@ import static org.assertj.core.api.Assertions.fail;
|
|
|
import static org.mockito.BDDMockito.given;
|
|
|
import static org.mockito.Mockito.mock;
|
|
|
import static org.mockito.Mockito.never;
|
|
|
+import static org.mockito.Mockito.times;
|
|
|
import static org.mockito.Mockito.verify;
|
|
|
|
|
|
/**
|
|
@@ -53,6 +55,7 @@ import static org.mockito.Mockito.verify;
|
|
|
*
|
|
|
* @author Ben Alex
|
|
|
* @author Eddú Meléndez
|
|
|
+ * @author Evgeniy Cheban
|
|
|
*/
|
|
|
public class AnonymousAuthenticationFilterTests {
|
|
|
|
|
@@ -128,6 +131,25 @@ public class AnonymousAuthenticationFilterTests {
|
|
|
verify(originalSupplier, never()).get();
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ public void doFilterSetsSingletonSupplier() throws Exception {
|
|
|
+ Supplier<SecurityContext> originalSupplier = mock(Supplier.class);
|
|
|
+ Authentication originalAuth = new TestingAuthenticationToken("user", "password", "ROLE_A");
|
|
|
+ SecurityContext originalContext = new SecurityContextImpl(originalAuth);
|
|
|
+ SecurityContextHolderStrategy strategy = new MockSecurityContextHolderStrategy(originalSupplier);
|
|
|
+ given(originalSupplier.get()).willReturn(originalContext);
|
|
|
+ AnonymousAuthenticationFilter filter = new AnonymousAuthenticationFilter("qwerty", "anonymousUsername",
|
|
|
+ AuthorityUtils.createAuthorityList("ROLE_ANONYMOUS"));
|
|
|
+ filter.setSecurityContextHolderStrategy(strategy);
|
|
|
+ filter.afterPropertiesSet();
|
|
|
+ executeFilterInContainerSimulator(mock(FilterConfig.class), filter, new MockHttpServletRequest(),
|
|
|
+ new MockHttpServletResponse(), new MockFilterChain(true));
|
|
|
+ Supplier<SecurityContext> deferredContext = strategy.getDeferredContext();
|
|
|
+ deferredContext.get();
|
|
|
+ deferredContext.get();
|
|
|
+ verify(originalSupplier, times(1)).get();
|
|
|
+ }
|
|
|
+
|
|
|
private class MockFilterChain implements FilterChain {
|
|
|
|
|
|
private boolean expectToProceed;
|