SpringTestContext registers WebTestClient Bean

Closes gh-17780
This commit is contained in:
Rob Winch 2025-08-20 12:00:24 -05:00
parent 806297da23
commit 5c5efc9092
No known key found for this signature in database
1 changed files with 16 additions and 0 deletions

View File

@ -30,8 +30,11 @@ import org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostP
import org.springframework.mock.web.MockServletConfig;
import org.springframework.security.config.BeanIds;
import org.springframework.security.config.util.InMemoryXmlWebApplicationContext;
import org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers;
import org.springframework.security.test.web.reactive.server.WebTestClientBuilder;
import org.springframework.security.web.servlet.MockServletContext;
import org.springframework.test.context.web.GenericXmlWebContextLoader;
import org.springframework.test.web.reactive.server.WebTestClient;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.RequestPostProcessor;
import org.springframework.test.web.servlet.setup.ConfigurableMockMvcBuilder;
@ -42,6 +45,7 @@ import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.context.support.XmlWebApplicationContext;
import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.server.WebFilter;
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;
@ -156,6 +160,18 @@ public class SpringTestContext implements Closeable {
// @formatter:on
this.context.getBeanFactory().registerResolvableDependency(MockMvc.class, mockMvc);
}
String webFluxSecurityBean = "org.springframework.security.config.annotation.web.reactive.WebFluxSecurityConfiguration.WebFilterChainFilter";
if (this.context.containsBean(webFluxSecurityBean)) {
WebFilter springSecurityFilter = this.context.getBean(webFluxSecurityBean, WebFilter.class);
// @formatter:off
WebTestClient webTest = WebTestClient
.bindToController(new WebTestClientBuilder.Http200RestController())
.webFilter(springSecurityFilter)
.apply(SecurityMockServerConfigurers.springSecurity())
.build();
// @formatter:on
this.context.getBeanFactory().registerResolvableDependency(WebTestClient.class, webTest);
}
AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor();
bpp.setBeanFactory(this.context.getBeanFactory());
bpp.processInjection(this.test);