Skip to content

Commit b311b81

Browse files
committed
Pick Up OidcSessionRegistry Bean
Closes gh-15813
1 parent 590aef0 commit b311b81

File tree

4 files changed

+29
-24
lines changed

4 files changed

+29
-24
lines changed

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

+9-2
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,17 @@ private static <B extends HttpSecurityBuilder<B>> OAuth2AuthorizedClientService
116116

117117
static <B extends HttpSecurityBuilder<B>> OidcSessionRegistry getOidcSessionRegistry(B builder) {
118118
OidcSessionRegistry sessionRegistry = builder.getSharedObject(OidcSessionRegistry.class);
119-
if (sessionRegistry == null) {
119+
if (sessionRegistry != null) {
120+
return sessionRegistry;
121+
}
122+
ApplicationContext context = builder.getSharedObject(ApplicationContext.class);
123+
if (context.getBeanNamesForType(OidcSessionRegistry.class).length == 1) {
124+
sessionRegistry = context.getBean(OidcSessionRegistry.class);
125+
}
126+
else {
120127
sessionRegistry = new InMemoryOidcSessionRegistry();
121-
builder.setSharedObject(OidcSessionRegistry.class, sessionRegistry);
122128
}
129+
builder.setSharedObject(OidcSessionRegistry.class, sessionRegistry);
123130
return sessionRegistry;
124131
}
125132

config/src/main/java/org/springframework/security/config/web/server/ServerHttpSecurity.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -5496,7 +5496,7 @@ private ReactiveClientRegistrationRepository getClientRegistrationRepository() {
54965496

54975497
private ReactiveOidcSessionRegistry getSessionRegistry() {
54985498
if (this.sessionRegistry == null && ServerHttpSecurity.this.oauth2Login == null) {
5499-
return new InMemoryReactiveOidcSessionRegistry();
5499+
return getBeanOrDefault(ReactiveOidcSessionRegistry.class, new InMemoryReactiveOidcSessionRegistry());
55005500
}
55015501
if (this.sessionRegistry == null) {
55025502
return ServerHttpSecurity.this.oauth2Login.oidcSessionRegistry;

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

+10-14
Original file line numberDiff line numberDiff line change
@@ -396,15 +396,13 @@ SecurityFilterChain filters(HttpSecurity http) throws Exception {
396396
@Import(RegistrationConfig.class)
397397
static class SelfLogoutUriConfig {
398398

399-
private final OidcSessionRegistry sessionRegistry = new InMemoryOidcSessionRegistry();
400-
401399
@Bean
402400
@Order(1)
403401
SecurityFilterChain filters(HttpSecurity http) throws Exception {
404402
// @formatter:off
405403
http
406404
.authorizeHttpRequests((authorize) -> authorize.anyRequest().authenticated())
407-
.oauth2Login((oauth2) -> oauth2.oidcSessionRegistry(this.sessionRegistry))
405+
.oauth2Login(Customizer.withDefaults())
408406
.oidcLogout((oidc) -> oidc
409407
.backChannel(Customizer.withDefaults())
410408
);
@@ -413,11 +411,6 @@ SecurityFilterChain filters(HttpSecurity http) throws Exception {
413411
return http.build();
414412
}
415413

416-
@Bean
417-
OidcBackChannelLogoutHandler oidcLogoutHandler() {
418-
return new OidcBackChannelLogoutHandler(this.sessionRegistry);
419-
}
420-
421414
}
422415

423416
@Configuration
@@ -427,15 +420,13 @@ static class CookieConfig {
427420

428421
private final MockWebServer server = new MockWebServer();
429422

430-
private final OidcSessionRegistry sessionRegistry = new InMemoryOidcSessionRegistry();
431-
432423
@Bean
433424
@Order(1)
434425
SecurityFilterChain filters(HttpSecurity http) throws Exception {
435426
// @formatter:off
436427
http
437428
.authorizeHttpRequests((authorize) -> authorize.anyRequest().authenticated())
438-
.oauth2Login((oauth2) -> oauth2.oidcSessionRegistry(this.sessionRegistry))
429+
.oauth2Login(Customizer.withDefaults())
439430
.oidcLogout((oidc) -> oidc
440431
.backChannel(Customizer.withDefaults())
441432
);
@@ -445,8 +436,13 @@ SecurityFilterChain filters(HttpSecurity http) throws Exception {
445436
}
446437

447438
@Bean
448-
OidcBackChannelLogoutHandler oidcLogoutHandler() {
449-
OidcBackChannelLogoutHandler logoutHandler = new OidcBackChannelLogoutHandler(this.sessionRegistry);
439+
OidcSessionRegistry sessionRegistry() {
440+
return new InMemoryOidcSessionRegistry();
441+
}
442+
443+
@Bean
444+
OidcBackChannelLogoutHandler oidcLogoutHandler(OidcSessionRegistry sessionRegistry) {
445+
OidcBackChannelLogoutHandler logoutHandler = new OidcBackChannelLogoutHandler(sessionRegistry);
450446
logoutHandler.setSessionCookieName("SESSION");
451447
return logoutHandler;
452448
}
@@ -485,7 +481,7 @@ SecurityFilterChain filters(HttpSecurity http) throws Exception {
485481
// @formatter:off
486482
http
487483
.authorizeHttpRequests((authorize) -> authorize.anyRequest().authenticated())
488-
.oauth2Login((oauth2) -> oauth2.oidcSessionRegistry(this.sessionRegistry))
484+
.oauth2Login(Customizer.withDefaults())
489485
.oidcLogout((oidc) -> oidc.backChannel(Customizer.withDefaults()));
490486
// @formatter:on
491487

config/src/test/java/org/springframework/security/config/web/server/OidcLogoutSpecTests.java

+9-7
Original file line numberDiff line numberDiff line change
@@ -519,8 +519,6 @@ SecurityWebFilterChain filters(ServerHttpSecurity http) throws Exception {
519519
@Import(RegistrationConfig.class)
520520
static class CookieConfig {
521521

522-
private final ReactiveOidcSessionRegistry sessionRegistry = new InMemoryReactiveOidcSessionRegistry();
523-
524522
private final MockWebServer server = new MockWebServer();
525523

526524
@Bean
@@ -529,7 +527,7 @@ SecurityWebFilterChain filters(ServerHttpSecurity http) throws Exception {
529527
// @formatter:off
530528
http
531529
.authorizeExchange((authorize) -> authorize.anyExchange().authenticated())
532-
.oauth2Login((oauth2) -> oauth2.oidcSessionRegistry(this.sessionRegistry))
530+
.oauth2Login(Customizer.withDefaults())
533531
.oidcLogout((oidc) -> oidc
534532
.backChannel(Customizer.withDefaults())
535533
);
@@ -539,9 +537,13 @@ SecurityWebFilterChain filters(ServerHttpSecurity http) throws Exception {
539537
}
540538

541539
@Bean
542-
OidcBackChannelServerLogoutHandler oidcLogoutHandler() {
543-
OidcBackChannelServerLogoutHandler logoutHandler = new OidcBackChannelServerLogoutHandler(
544-
this.sessionRegistry);
540+
ReactiveOidcSessionRegistry oidcSessionRegistry() {
541+
return new InMemoryReactiveOidcSessionRegistry();
542+
}
543+
544+
@Bean
545+
OidcBackChannelServerLogoutHandler oidcLogoutHandler(ReactiveOidcSessionRegistry sessionRegistry) {
546+
OidcBackChannelServerLogoutHandler logoutHandler = new OidcBackChannelServerLogoutHandler(sessionRegistry);
545547
logoutHandler.setSessionCookieName("JSESSIONID");
546548
return logoutHandler;
547549
}
@@ -580,7 +582,7 @@ SecurityWebFilterChain filters(ServerHttpSecurity http) throws Exception {
580582
// @formatter:off
581583
http
582584
.authorizeExchange((authorize) -> authorize.anyExchange().authenticated())
583-
.oauth2Login((oauth2) -> oauth2.oidcSessionRegistry(this.sessionRegistry))
585+
.oauth2Login(Customizer.withDefaults())
584586
.oidcLogout((oidc) -> oidc.backChannel(Customizer.withDefaults()));
585587
// @formatter:on
586588

0 commit comments

Comments
 (0)