|
|
|
@ -32,6 +32,7 @@ import org.junit.jupiter.api.Test; |
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.mock.web.MockHttpServletRequest; |
|
|
|
import org.springframework.mock.web.MockHttpServletRequest; |
|
|
|
import org.springframework.mock.web.MockHttpServletResponse; |
|
|
|
import org.springframework.mock.web.MockHttpServletResponse; |
|
|
|
|
|
|
|
import org.springframework.security.MockSecurityContextHolderStrategy; |
|
|
|
import org.springframework.security.authentication.TestingAuthenticationToken; |
|
|
|
import org.springframework.security.authentication.TestingAuthenticationToken; |
|
|
|
import org.springframework.security.core.Authentication; |
|
|
|
import org.springframework.security.core.Authentication; |
|
|
|
import org.springframework.security.core.authority.AuthorityUtils; |
|
|
|
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.BDDMockito.given; |
|
|
|
import static org.mockito.Mockito.mock; |
|
|
|
import static org.mockito.Mockito.mock; |
|
|
|
import static org.mockito.Mockito.never; |
|
|
|
import static org.mockito.Mockito.never; |
|
|
|
|
|
|
|
import static org.mockito.Mockito.times; |
|
|
|
import static org.mockito.Mockito.verify; |
|
|
|
import static org.mockito.Mockito.verify; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
@ -53,6 +55,7 @@ import static org.mockito.Mockito.verify; |
|
|
|
* |
|
|
|
* |
|
|
|
* @author Ben Alex |
|
|
|
* @author Ben Alex |
|
|
|
* @author Eddú Meléndez |
|
|
|
* @author Eddú Meléndez |
|
|
|
|
|
|
|
* @author Evgeniy Cheban |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public class AnonymousAuthenticationFilterTests { |
|
|
|
public class AnonymousAuthenticationFilterTests { |
|
|
|
|
|
|
|
|
|
|
|
@ -128,6 +131,25 @@ public class AnonymousAuthenticationFilterTests { |
|
|
|
verify(originalSupplier, never()).get(); |
|
|
|
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 class MockFilterChain implements FilterChain { |
|
|
|
|
|
|
|
|
|
|
|
private boolean expectToProceed; |
|
|
|
private boolean expectToProceed; |
|
|
|
|