diff --git a/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/resource/OAuth2ResourceServerConfigurer.java b/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/resource/OAuth2ResourceServerConfigurer.java index ab7d35be40..f4421f0cff 100644 --- a/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/resource/OAuth2ResourceServerConfigurer.java +++ b/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/resource/OAuth2ResourceServerConfigurer.java @@ -232,19 +232,7 @@ public final class OAuth2ResourceServerConfigurer this.spring.register(AuthenticationManagerResolverPlusOtherConfig.class).autowire()) + .isInstanceOf(BeanCreationException.class) + .hasMessageContaining("authenticationManagerResolver"); + } + // -- support @EnableWebSecurity @@ -2064,6 +2072,21 @@ public class OAuth2ResourceServerConfigurerTests { } } + @EnableWebSecurity + static class AuthenticationManagerResolverPlusOtherConfig extends WebSecurityConfigurerAdapter { + @Override + protected void configure(HttpSecurity http) throws Exception { + // @formatter:off + http + .authorizeRequests() + .anyRequest().authenticated() + .and() + .oauth2ResourceServer() + .authenticationManagerResolver(mock(AuthenticationManagerResolver.class)) + .opaqueToken(); + } + } + @Configuration static class JwtDecoderConfig { @Bean diff --git a/config/src/test/java/org/springframework/security/config/web/server/OAuth2ResourceServerSpecTests.java b/config/src/test/java/org/springframework/security/config/web/server/OAuth2ResourceServerSpecTests.java index 2d547016a3..75918cc97f 100644 --- a/config/src/test/java/org/springframework/security/config/web/server/OAuth2ResourceServerSpecTests.java +++ b/config/src/test/java/org/springframework/security/config/web/server/OAuth2ResourceServerSpecTests.java @@ -41,6 +41,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import reactor.core.publisher.Mono; +import org.springframework.beans.factory.BeanCreationException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.NoUniqueBeanDefinitionException; import org.springframework.beans.factory.annotation.Autowired; @@ -457,6 +458,13 @@ public class OAuth2ResourceServerSpecTests { .expectStatus().isOk(); } + @Test + public void configureWhenUsingBothAuthenticationManagerResolverAndOpaqueThenWiringException() { + assertThatCode(() -> this.spring.register(AuthenticationManagerResolverPlusOtherConfig.class).autowire()) + .isInstanceOf(BeanCreationException.class) + .hasMessageContaining("authenticationManagerResolver"); + } + @EnableWebFlux @EnableWebFluxSecurity static class PublicKeyConfig { @@ -849,6 +857,24 @@ public class OAuth2ResourceServerSpecTests { } } + @EnableWebFlux + @EnableWebFluxSecurity + static class AuthenticationManagerResolverPlusOtherConfig { + @Bean + SecurityWebFilterChain springSecurity(ServerHttpSecurity http) { + // @formatter:off + http + .authorizeExchange() + .anyExchange().authenticated() + .and() + .oauth2ResourceServer() + .authenticationManagerResolver(mock(ReactiveAuthenticationManagerResolver.class)) + .opaqueToken(); + + return http.build(); + } + } + @RestController static class RootController { @GetMapping