diff --git a/config/src/main/java/org/springframework/security/config/annotation/web/builders/HttpSecurity.java b/config/src/main/java/org/springframework/security/config/annotation/web/builders/HttpSecurity.java index da2416d4b7..ac22562cd4 100644 --- a/config/src/main/java/org/springframework/security/config/annotation/web/builders/HttpSecurity.java +++ b/config/src/main/java/org/springframework/security/config/annotation/web/builders/HttpSecurity.java @@ -999,8 +999,8 @@ public final class HttpSecurity extends * @return the {@link OAuth2Configurer} for further customizations * @throws Exception */ - public OAuth2Configurer oauth2() throws Exception { - return getOrApply(new OAuth2Configurer()); + public OAuth2Configurer oauth2() throws Exception { + return getOrApply(new OAuth2Configurer<>()); } /** diff --git a/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/OAuth2Configurer.java b/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/OAuth2Configurer.java index 60b5e49855..a1cba10d99 100644 --- a/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/OAuth2Configurer.java +++ b/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/OAuth2Configurer.java @@ -15,6 +15,8 @@ */ package org.springframework.security.config.annotation.web.configurers.oauth2; +import org.springframework.security.config.annotation.ObjectPostProcessor; +import org.springframework.security.config.annotation.web.HttpSecurityBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.config.annotation.web.configurers.oauth2.client.OAuth2ClientConfigurer; @@ -29,7 +31,11 @@ import org.springframework.security.config.annotation.web.configurers.oauth2.cli * @see OAuth2ClientConfigurer * @see AbstractHttpConfigurer */ -public final class OAuth2Configurer extends AbstractHttpConfigurer { +public final class OAuth2Configurer> + extends AbstractHttpConfigurer, B> { + + private final OAuth2ClientConfigurer clientConfigurer = new OAuth2ClientConfigurer<>(); + private boolean clientEnabled; /** * Returns the {@link OAuth2ClientConfigurer} for configuring OAuth 2.0 Client support. @@ -37,16 +43,40 @@ public final class OAuth2Configurer extends AbstractHttpConfigurer client() throws Exception { - return this.getOrApply(new OAuth2ClientConfigurer<>()); + public OAuth2ClientConfigurer client() throws Exception { + this.clientEnabled = true; + return this.clientConfigurer; } - @SuppressWarnings("unchecked") - private > C getOrApply(C configurer) throws Exception { - C existingConfigurer = (C) this.getBuilder().getConfigurer(configurer.getClass()); - if (existingConfigurer != null) { - return existingConfigurer; + @Override + public void init(B builder) throws Exception { + if (this.clientEnabled) { + this.clientConfigurer.init(builder); } - return this.getBuilder().apply(configurer); + } + + @Override + public void configure(B builder) throws Exception { + if (this.clientEnabled) { + this.clientConfigurer.configure(builder); + } + } + + @Override + public void setBuilder(B builder) { + this.clientConfigurer.setBuilder(builder); + super.setBuilder(builder); + } + + @Override + public void addObjectPostProcessor(ObjectPostProcessor objectPostProcessor) { + this.clientConfigurer.addObjectPostProcessor(objectPostProcessor); + super.addObjectPostProcessor(objectPostProcessor); + } + + @Override + public OAuth2Configurer withObjectPostProcessor(ObjectPostProcessor objectPostProcessor) { + this.clientConfigurer.withObjectPostProcessor(objectPostProcessor); + return super.withObjectPostProcessor(objectPostProcessor); } }