From 73c25d7156ae0f6bc42f21f5c9466d80fca4550a Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Fri, 15 Sep 2023 10:41:37 +0200 Subject: [PATCH] Provide RestClientSsl as a bean Closes gh-37400 --- .../web/client/RestClientAutoConfiguration.java | 12 +++++++++++- .../boot/autoconfigure/web/client/RestClientSsl.java | 2 +- .../web/client/RestClientAutoConfigurationTests.java | 7 +++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/client/RestClientAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/client/RestClientAutoConfiguration.java index 31b7f39244..6198b70bfa 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/client/RestClientAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/client/RestClientAutoConfiguration.java @@ -19,10 +19,13 @@ package org.springframework.boot.autoconfigure.web.client; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration; +import org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration; +import org.springframework.boot.ssl.SslBundles; import org.springframework.boot.web.client.ClientHttpRequestFactories; import org.springframework.boot.web.client.ClientHttpRequestFactorySettings; import org.springframework.boot.web.client.RestClientCustomizer; @@ -44,7 +47,7 @@ import org.springframework.web.client.RestClient; * @author Moritz Halbritter * @since 3.2.0 */ -@AutoConfiguration(after = HttpMessageConvertersAutoConfiguration.class) +@AutoConfiguration(after = { HttpMessageConvertersAutoConfiguration.class, SslAutoConfiguration.class }) @ConditionalOnClass(RestClient.class) @Conditional(NotReactiveWebApplicationCondition.class) public class RestClientAutoConfiguration { @@ -57,6 +60,13 @@ public class RestClientAutoConfiguration { return new HttpMessageConvertersRestClientCustomizer(messageConverters.getIfUnique()); } + @Bean + @ConditionalOnMissingBean(RestClientSsl.class) + @ConditionalOnBean(SslBundles.class) + AutoConfiguredRestClientSsl restClientSsl(SslBundles sslBundles) { + return new AutoConfiguredRestClientSsl(sslBundles); + } + @Bean @ConditionalOnMissingBean RestClientBuilderConfigurer restClientBuilderConfigurer(ObjectProvider customizerProvider) { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/client/RestClientSsl.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/client/RestClientSsl.java index bcf97ddca1..fd892efb43 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/client/RestClientSsl.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/client/RestClientSsl.java @@ -32,7 +32,7 @@ import org.springframework.web.client.RestClient; * Typically used as follows:
  * @Bean
  * public MyBean myBean(RestClient.Builder restClientBuilder, RestClientSsl ssl) {
- *     RestClient restClientrestClient= restClientBuilder.apply(ssl.forBundle("mybundle")).build();
+ *     RestClient restClientrestClient= restClientBuilder.apply(ssl.fromBundle("mybundle")).build();
  *     return new MyBean(webClient);
  * }
  * 
NOTE: Apply SSL configuration will replace any previously diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/client/RestClientAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/client/RestClientAutoConfigurationTests.java index d2fb90dbf9..576d6e4580 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/client/RestClientAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/client/RestClientAutoConfigurationTests.java @@ -23,6 +23,7 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration; +import org.springframework.boot.ssl.SslBundles; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.web.client.RestClientCustomizer; import org.springframework.boot.web.codec.CodecCustomizer; @@ -59,6 +60,12 @@ class RestClientAutoConfigurationTests { }); } + @Test + void shouldSupplyRestClientSslIfSslBundlesIsThere() { + this.contextRunner.withBean(SslBundles.class, () -> mock(SslBundles.class)) + .run((context) -> assertThat(context).hasSingleBean(RestClientSsl.class)); + } + @Test void shouldCreateBuilder() { this.contextRunner.run((context) -> {