Skip to content

Commit a1f5b34

Browse files
committed
Merge branch '6.5.x'
2 parents 25f69e9 + ecec7cb commit a1f5b34

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurer.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,8 @@ public final class OAuth2LoginConfigurer<B extends HttpSecurityBuilder<B>>
180180

181181
private OAuth2AuthorizedClientRepository authorizedClientRepository;
182182

183+
private SecurityContextRepository securityContextRepository;
184+
183185
/**
184186
* Sets the repository of client registrations.
185187
* @param clientRegistrationRepository the repository of client registrations
@@ -233,6 +235,17 @@ public OAuth2LoginConfigurer<B> loginProcessingUrl(String loginProcessingUrl) {
233235
return this;
234236
}
235237

238+
/**
239+
* Sets the {@link SecurityContextRepository} to use.
240+
* @param securityContextRepository the {@link SecurityContextRepository} to use
241+
* @return the {@link OAuth2LoginConfigurer} for further configuration
242+
*/
243+
@Override
244+
public OAuth2LoginConfigurer<B> securityContextRepository(SecurityContextRepository securityContextRepository) {
245+
this.securityContextRepository = securityContextRepository;
246+
return this;
247+
}
248+
236249
/**
237250
* Sets the registry for managing the OIDC client-provider session link
238251
* @param oidcSessionRegistry the {@link OidcSessionRegistry} to use
@@ -299,6 +312,9 @@ public void init(B http) throws Exception {
299312
RequestMatcher processUri = getRequestMatcherBuilder().matcher(this.loginProcessingUrl);
300313
authenticationFilter.setRequiresAuthenticationRequestMatcher(processUri);
301314
authenticationFilter.setSecurityContextHolderStrategy(getSecurityContextHolderStrategy());
315+
if (this.securityContextRepository != null) {
316+
authenticationFilter.setSecurityContextRepository(this.securityContextRepository);
317+
}
302318
this.setAuthenticationFilter(authenticationFilter);
303319
super.loginProcessingUrl(this.loginProcessingUrl);
304320
if (this.loginPage != null) {

config/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurerTests.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@
106106
import org.springframework.security.web.authentication.HttpStatusEntryPoint;
107107
import org.springframework.security.web.context.HttpRequestResponseHolder;
108108
import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
109+
import org.springframework.security.web.context.NullSecurityContextRepository;
109110
import org.springframework.security.web.context.SecurityContextRepository;
110111
import org.springframework.security.web.servlet.TestMockHttpServletRequests;
111112
import org.springframework.security.web.session.HttpSessionDestroyedEvent;
@@ -116,6 +117,7 @@
116117

117118
import static org.assertj.core.api.Assertions.assertThat;
118119
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
120+
import static org.assertj.core.api.Assertions.assertThatNoException;
119121
import static org.mockito.ArgumentMatchers.any;
120122
import static org.mockito.ArgumentMatchers.anyString;
121123
import static org.mockito.BDDMockito.given;
@@ -717,6 +719,12 @@ public void oauth2LoginWhenAuthenticationProviderPostProcessorThenUses() throws
717719
verify(this.context.getBean(SpyObjectPostProcessor.class).spy).authenticate(any());
718720
}
719721

722+
// gh-16623
723+
@Test
724+
public void oauth2LoginWithCustomSecurityContextRepository() {
725+
assertThatNoException().isThrownBy(() -> loadConfig(OAuth2LoginConfigSecurityContextRepository.class));
726+
}
727+
720728
private void loadConfig(Class<?>... configs) {
721729
AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
722730
applicationContext.register(configs);
@@ -961,6 +969,24 @@ SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
961969

962970
}
963971

972+
@Configuration
973+
@EnableWebSecurity
974+
static class OAuth2LoginConfigSecurityContextRepository extends CommonSecurityFilterChainConfig {
975+
976+
@Bean
977+
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
978+
// @formatter:off
979+
http
980+
.oauth2Login((login) -> login
981+
.clientRegistrationRepository(
982+
new InMemoryClientRegistrationRepository(GOOGLE_CLIENT_REGISTRATION))
983+
.securityContextRepository(new NullSecurityContextRepository()));
984+
// @formatter:on
985+
return super.configureFilterChain(http);
986+
}
987+
988+
}
989+
964990
@Configuration
965991
@EnableWebSecurity
966992
static class OAuth2LoginConfigCustomAuthorizationRequestResolver extends CommonSecurityFilterChainConfig {

0 commit comments

Comments
 (0)