Skip to content

Commit 6e6d472

Browse files
committed
Add test support for SecurityContextHolderFilter
Issue gh-9635
1 parent 86c3ce7 commit 6e6d472

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

test/src/main/java/org/springframework/security/test/web/support/WebTestUtils.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ public static void setSecurityContextRepository(HttpServletRequest request,
8585
if (filter != null) {
8686
ReflectionTestUtils.setField(filter, "repo", securityContextRepository);
8787
}
88+
SecurityContextHolderFilter holderFilter = findFilter(request, SecurityContextHolderFilter.class);
89+
if (holderFilter != null) {
90+
ReflectionTestUtils.setField(holderFilter, "securityContextRepository", securityContextRepository);
91+
}
8892
}
8993

9094
/**

test/src/test/java/org/springframework/security/test/web/support/WebTestUtilsTests.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.mockito.junit.jupiter.MockitoExtension;
2525

2626
import org.springframework.context.ConfigurableApplicationContext;
27+
import org.springframework.context.annotation.Bean;
2728
import org.springframework.context.annotation.Configuration;
2829
import org.springframework.mock.web.MockHttpServletRequest;
2930
import org.springframework.security.config.BeanIds;
@@ -33,6 +34,7 @@
3334
import org.springframework.security.web.DefaultSecurityFilterChain;
3435
import org.springframework.security.web.FilterChainProxy;
3536
import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
37+
import org.springframework.security.web.context.SecurityContextHolderFilter;
3638
import org.springframework.security.web.context.SecurityContextPersistenceFilter;
3739
import org.springframework.security.web.context.SecurityContextRepository;
3840
import org.springframework.security.web.csrf.CsrfFilter;
@@ -43,6 +45,7 @@
4345
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
4446

4547
import static org.assertj.core.api.Assertions.assertThat;
48+
import static org.mockito.Mockito.mock;
4649

4750
@ExtendWith(MockitoExtension.class)
4851
public class WebTestUtilsTests {
@@ -126,6 +129,19 @@ public void getSecurityContextRepositorySecurityCustomRepo() {
126129
assertThat(WebTestUtils.getSecurityContextRepository(this.request)).isSameAs(this.contextRepo);
127130
}
128131

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+
129145
// gh-3343
130146
@Test
131147
public void findFilterNoMatchingFilters() {
@@ -220,4 +236,18 @@ static class SecurityConfigWithDefaults extends WebSecurityConfigurerAdapter {
220236

221237
}
222238

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+
223253
}

0 commit comments

Comments
 (0)