Add SSL bundle support to WebClient auto-configuration
Introduce `WebClientSsl` interface and auto-configuration to allow a WebClient builder to have custom SSL configuration applied. The previous `ClientHttpConnectorConfiguration` has been been changed to now create `ClientHttpConnectorFactory` instances which can be used directly or by `AutoConfiguredWebClientSsl`. Closes gh-18556
This commit is contained in:
@@ -90,3 +90,16 @@ To make an application-wide, additive customization to all `WebClient.Builder` i
|
||||
|
||||
Finally, you can fall back to the original API and use `WebClient.create()`.
|
||||
In that case, no auto-configuration or `WebClientCustomizer` is applied.
|
||||
|
||||
|
||||
|
||||
[[io.rest-client.webclient.ssl]]
|
||||
==== WebClient SSL Support
|
||||
If you need custom SSL configuration on the `ClientHttpConnector` used by the `WebClient`, you can inject a `WebClientSsl` instance that can be used with the builder's `apply` method.
|
||||
|
||||
The `WebClientSsl` interface provides access to any <<features#features.ssl.bundles,SSL bundles>> that you have defined in your `application.properties` or `application.yaml` file.
|
||||
|
||||
The following code shows a typical example:
|
||||
|
||||
include::code:MyService[]
|
||||
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright 2012-2023 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.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docs.io.restclient.webclient.ssl;
|
||||
|
||||
import org.neo4j.cypherdsl.core.Relationship.Details;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientSsl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.reactive.function.client.WebClient;
|
||||
|
||||
@Service
|
||||
public class MyService {
|
||||
|
||||
private final WebClient webClient;
|
||||
|
||||
public MyService(WebClient.Builder webClientBuilder, WebClientSsl ssl) {
|
||||
this.webClient = webClientBuilder.baseUrl("https://example.org").apply(ssl.fromBundle("mybundle")).build();
|
||||
}
|
||||
|
||||
public Mono<Details> someRestCall(String name) {
|
||||
return this.webClient.get().uri("/{name}/details", name).retrieve().bodyToMono(Details.class);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright 2012-2022 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.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docs.io.restclient.webclient.ssl
|
||||
|
||||
import org.neo4j.cypherdsl.core.Relationship
|
||||
import org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientSsl
|
||||
import org.springframework.stereotype.Service
|
||||
import org.springframework.web.reactive.function.client.WebClient
|
||||
import reactor.core.publisher.Mono
|
||||
|
||||
@Service
|
||||
class MyService(webClientBuilder: WebClient.Builder, ssl: WebClientSsl) {
|
||||
|
||||
private val webClient: WebClient
|
||||
|
||||
init {
|
||||
webClient = webClientBuilder.baseUrl("https://example.org").apply(ssl.fromBundle("mybundle")).build()
|
||||
}
|
||||
|
||||
fun someRestCall(name: String?): Mono<Relationship.Details> {
|
||||
return webClient.get().uri("/{name}/details", name).retrieve().bodyToMono(
|
||||
Relationship.Details::class.java
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user