@ -105,6 +105,7 @@ import org.springframework.security.web.SecurityFilterChain;
@@ -105,6 +105,7 @@ import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.HttpStatusEntryPoint ;
import org.springframework.security.web.context.HttpRequestResponseHolder ;
import org.springframework.security.web.context.HttpSessionSecurityContextRepository ;
import org.springframework.security.web.context.NullSecurityContextRepository ;
import org.springframework.security.web.context.SecurityContextRepository ;
import org.springframework.security.web.session.HttpSessionDestroyedEvent ;
import org.springframework.security.web.util.matcher.RequestHeaderRequestMatcher ;
@ -114,6 +115,7 @@ import org.springframework.web.context.support.AnnotationConfigWebApplicationCon
@@ -114,6 +115,7 @@ import org.springframework.web.context.support.AnnotationConfigWebApplicationCon
import static org.assertj.core.api.Assertions.assertThat ;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType ;
import static org.assertj.core.api.Assertions.assertThatNoException ;
import static org.mockito.ArgumentMatchers.any ;
import static org.mockito.ArgumentMatchers.anyString ;
import static org.mockito.BDDMockito.given ;
@ -729,6 +731,12 @@ public class OAuth2LoginConfigurerTests {
@@ -729,6 +731,12 @@ public class OAuth2LoginConfigurerTests {
verify ( this . context . getBean ( SpyObjectPostProcessor . class ) . spy ) . authenticate ( any ( ) ) ;
}
// gh-16623
@Test
public void oauth2LoginWithCustomSecurityContextRepository ( ) {
assertThatNoException ( ) . isThrownBy ( ( ) - > loadConfig ( OAuth2LoginConfigSecurityContextRepository . class ) ) ;
}
private void loadConfig ( Class < ? > . . . configs ) {
AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext ( ) ;
applicationContext . register ( configs ) ;
@ -977,6 +985,24 @@ public class OAuth2LoginConfigurerTests {
@@ -977,6 +985,24 @@ public class OAuth2LoginConfigurerTests {
}
@Configuration
@EnableWebSecurity
static class OAuth2LoginConfigSecurityContextRepository extends CommonSecurityFilterChainConfig {
@Bean
SecurityFilterChain filterChain ( HttpSecurity http ) throws Exception {
// @formatter:off
http
. oauth2Login ( ( login ) - > login
. clientRegistrationRepository (
new InMemoryClientRegistrationRepository ( GOOGLE_CLIENT_REGISTRATION ) )
. securityContextRepository ( new NullSecurityContextRepository ( ) ) ) ;
// @formatter:on
return super . configureFilterChain ( http ) ;
}
}
@Configuration
@EnableWebSecurity
static class OAuth2LoginConfigCustomAuthorizationRequestResolver extends CommonSecurityFilterChainConfig {