Este escrito fue evaluado por expertos para que tengas la garantía de la veracidad de nuestra esta reseña.
Solución:
Parece que Spring 5.1.1 (Spring boot 2.1.0) eliminado HttpClientOptions
de ReactorClientHttpConnector
, por lo que no puede configurar opciones mientras crea una instancia de ReactorClientHttpConnector
Una opción que funciona ahora es:
val sslContext = SslContextBuilder
.forClient()
.trustManager(InsecureTrustManagerFactory.INSTANCE)
.build()
val httpClient = HttpClient.create().secure t -> t.sslContext(sslContext)
val webClient = WebClient.builder().clientConnector(ReactorClientHttpConnector(httpClient)).build()
Básicamente, mientras creamos el HttpClient, estamos configurando el insegurosslContexty luego pasar este httpClient para su uso en ReactorClientHttpConnector
a nivel mundial.
La otra opcion es configurar TcpClient
con sslContext inseguro y utilícelo para crear HttpClient
ejemplo, como se ilustra a continuación:
val sslContext = SslContextBuilder
.forClient()
.trustManager(InsecureTrustManagerFactory.INSTANCE)
.build()
val tcpClient = TcpClient.create().secure sslProviderBuilder -> sslProviderBuilder.sslContext(sslContext)
val httpClient = HttpClient.from(tcpClient)
val webClient = WebClient.builder().clientConnector(ReactorClientHttpConnector(httpClient)).build()
Para más información:
- https://docs.spring.io/spring/docs/5.1.1.RELEASE/spring-framework-reference/web-reactive.html#webflux-client-builder-reactor
- https://netty.io/4.0/api/io/netty/handler/ssl/util/InsecureTrustManagerFactory.html
Actualización: versión Java del mismo código
SslContext context = SslContextBuilder.forClient()
.trustManager(InsecureTrustManagerFactory.INSTANCE)
.build();
HttpClient httpClient = HttpClient.create().secure(t -> t.sslContext(context));
WebClient wc = WebClient
.builder()
.clientConnector(new ReactorClientHttpConnector(httpClient)).build();
Vea un ejemplo de uso inseguro de TrustManagerFactory que confía en todos los certificados X.509 (incluidos los autofirmados) sin ninguna verificación. La nota importante de la documentación:
Nunca use este TrustManagerFactory en producción. Es puramente con fines de prueba y, por lo tanto, es muy inseguro.
@Bean
public WebClient createWebClient() throws SSLException
SslContext sslContext = SslContextBuilder
.forClient()
.trustManager(InsecureTrustManagerFactory.INSTANCE)
.build();
ClientHttpConnector httpConnector = HttpClient.create().secure(t -> t.sslContext(sslContext) )
return WebClient.builder().clientConnector(httpConnector).build();
Tuve que editar esto, para acomodar los cambios de spring-boot 2.0-> 2.1.
Otra forma, si desea programar el código de producción, es crear un bean de primavera como tal, que modifique el WebClient inyectado, usando la configuración del servidor de arranque de primavera para donde están el almacén de confianza y el almacén de claves. En el cliente, solo necesita proporcionar el almacén de claves, si está utilizando 2-way-ssl. No estoy seguro de por qué ssl-stuff no está preconfigurado y es fácilmente inyectable, similar a la realmente genial configuración del servidor de arranque de primavera.
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
.
.
.
@Bean
WebClientCustomizer configureWebclient(@Value("$server.ssl.trust-store") String trustStorePath, @Value("$server.ssl.trust-store-password") String trustStorePass,
@Value("$server.ssl.key-store") String keyStorePath, @Value("$server.ssl.key-store-password") String keyStorePass, @Value("$server.ssl.key-alias") String keyAlias)
return (WebClient.Builder webClientBuilder) -> UnrecoverableKeyException e)
throw new RuntimeException(e);
;
Aquí la parte, donde usa el Webclient:
import org.springframework.web.reactive.function.client.WebClient;
@Component
public class ClientComponent
public ClientComponent(WebClient.Builder webClientBuilder, @Value("$url") String url)
this.client = webClientBuilder.baseUrl(solrUrl).build();
Te mostramos las comentarios y valoraciones de los usuarios
Si tienes alguna desconfianza y capacidad de mejorar nuestro artículo eres capaz de dejar una crítica y con placer lo analizaremos.