|
24 | 24 | import org.mockito.junit.jupiter.MockitoExtension;
|
25 | 25 |
|
26 | 26 | import org.springframework.context.ConfigurableApplicationContext;
|
| 27 | +import org.springframework.context.annotation.Bean; |
27 | 28 | import org.springframework.context.annotation.Configuration;
|
28 | 29 | import org.springframework.mock.web.MockHttpServletRequest;
|
29 | 30 | import org.springframework.security.config.BeanIds;
|
|
33 | 34 | import org.springframework.security.web.DefaultSecurityFilterChain;
|
34 | 35 | import org.springframework.security.web.FilterChainProxy;
|
35 | 36 | import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
|
| 37 | +import org.springframework.security.web.context.SecurityContextHolderFilter; |
36 | 38 | import org.springframework.security.web.context.SecurityContextPersistenceFilter;
|
37 | 39 | import org.springframework.security.web.context.SecurityContextRepository;
|
38 | 40 | import org.springframework.security.web.csrf.CsrfFilter;
|
|
43 | 45 | import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
|
44 | 46 |
|
45 | 47 | import static org.assertj.core.api.Assertions.assertThat;
|
| 48 | +import static org.mockito.Mockito.mock; |
46 | 49 |
|
47 | 50 | @ExtendWith(MockitoExtension.class)
|
48 | 51 | public class WebTestUtilsTests {
|
@@ -126,6 +129,19 @@ public void getSecurityContextRepositorySecurityCustomRepo() {
|
126 | 129 | assertThat(WebTestUtils.getSecurityContextRepository(this.request)).isSameAs(this.contextRepo);
|
127 | 130 | }
|
128 | 131 |
|
| 132 | + @Test |
| 133 | + public void setSecurityContextRepositoryWhenSecurityContextHolderFilter() { |
| 134 | + SecurityContextRepository expectedRepository = mock(SecurityContextRepository.class); |
| 135 | + loadConfig(SecurityContextHolderFilterConfig.class); |
| 136 | + // verify our configuration sets up to have SecurityContextHolderFilter and not |
| 137 | + // SecurityContextPersistenceFilter |
| 138 | + assertThat(WebTestUtils.findFilter(this.request, SecurityContextPersistenceFilter.class)).isNull(); |
| 139 | + assertThat(WebTestUtils.findFilter(this.request, SecurityContextHolderFilter.class)).isNotNull(); |
| 140 | + |
| 141 | + WebTestUtils.setSecurityContextRepository(this.request, expectedRepository); |
| 142 | + assertThat(WebTestUtils.getSecurityContextRepository(this.request)).isSameAs(expectedRepository); |
| 143 | + } |
| 144 | + |
129 | 145 | // gh-3343
|
130 | 146 | @Test
|
131 | 147 | public void findFilterNoMatchingFilters() {
|
@@ -220,4 +236,18 @@ static class SecurityConfigWithDefaults extends WebSecurityConfigurerAdapter {
|
220 | 236 |
|
221 | 237 | }
|
222 | 238 |
|
| 239 | + @EnableWebSecurity |
| 240 | + static class SecurityContextHolderFilterConfig { |
| 241 | + |
| 242 | + @Bean |
| 243 | + DefaultSecurityFilterChain springSecurityFilter(HttpSecurity http) throws Exception { |
| 244 | + // @formatter:off |
| 245 | + http |
| 246 | + .securityContext((securityContext) -> securityContext.requireExplicitSave(true)); |
| 247 | + // @formatter:on |
| 248 | + return http.build(); |
| 249 | + } |
| 250 | + |
| 251 | + } |
| 252 | + |
223 | 253 | }
|
0 commit comments