From 3ab6bee85657c7381e6464416069f84ef02b39ff Mon Sep 17 00:00:00 2001 From: Eleftheria Stein Date: Wed, 11 Aug 2021 13:26:47 +0200 Subject: [PATCH] Make method static to prevent circular dependency error Workaround for circular dependency between ServerHttpSecurityConfiguration and WebFluxConfigurationSupport. Closes gh-10076 --- .../reactive/ServerHttpSecurityConfiguration.java | 4 ++-- .../web/reactive/EnableWebFluxSecurityTests.java | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/config/src/main/java/org/springframework/security/config/annotation/web/reactive/ServerHttpSecurityConfiguration.java b/config/src/main/java/org/springframework/security/config/annotation/web/reactive/ServerHttpSecurityConfiguration.java index 676bfa5161..70648cca6f 100644 --- a/config/src/main/java/org/springframework/security/config/annotation/web/reactive/ServerHttpSecurityConfiguration.java +++ b/config/src/main/java/org/springframework/security/config/annotation/web/reactive/ServerHttpSecurityConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -89,7 +89,7 @@ class ServerHttpSecurityConfiguration { } @Bean - WebFluxConfigurer authenticationPrincipalArgumentResolverConfigurer( + static WebFluxConfigurer authenticationPrincipalArgumentResolverConfigurer( ObjectProvider authenticationPrincipalArgumentResolver) { return new WebFluxConfigurer() { diff --git a/config/src/test/java/org/springframework/security/config/annotation/web/reactive/EnableWebFluxSecurityTests.java b/config/src/test/java/org/springframework/security/config/annotation/web/reactive/EnableWebFluxSecurityTests.java index 8dd8610c62..de6b160340 100644 --- a/config/src/test/java/org/springframework/security/config/annotation/web/reactive/EnableWebFluxSecurityTests.java +++ b/config/src/test/java/org/springframework/security/config/annotation/web/reactive/EnableWebFluxSecurityTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,6 +32,7 @@ import org.springframework.core.annotation.Order; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.MediaType; +import org.springframework.mock.web.MockServletContext; import org.springframework.security.authentication.TestingAuthenticationToken; import org.springframework.security.config.test.SpringTestContext; import org.springframework.security.config.test.SpringTestContextExtension; @@ -64,6 +65,7 @@ import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.reactive.config.DelegatingWebFluxConfiguration; import org.springframework.web.reactive.config.EnableWebFlux; import org.springframework.web.reactive.function.BodyInserters; @@ -307,6 +309,17 @@ public class EnableWebFluxSecurityTests { DelegatingWebFluxConfiguration.class).autowire(); } + @Test + // gh-10076 + public void webFluxConfigurationSupportAndServerHttpSecurityConfigurationDoNotCauseCircularReference() { + AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); + context.setAllowCircularReferences(false); + context.register(EnableWebFluxSecurityConfiguration.class, ReactiveAuthenticationTestConfiguration.class, + DelegatingWebFluxConfiguration.class); + context.setServletContext(new MockServletContext()); + context.refresh(); + } + @EnableWebFluxSecurity @Import(ReactiveAuthenticationTestConfiguration.class) static class Config {