使用 ssl 的 Spring 5 WebClient

标签 spring ssl reactive-programming self-signed spring-webflux

我正在尝试查找使用 WebClient 的示例。

我的目标是使用 Spring 5 WebClient 使用 https 和自签名证书查询 REST 服务

有什么例子吗?

最佳答案

似乎删除了 Spring 5.1.1 (Spring boot 2.1.0) HttpClientOptions来自 ReactorClientHttpConnector ,所以在创建 ReactorClientHttpConnector 的实例时不能配置选项

现在可行的一个选项是:

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()

基本上在创建 HttpClient 时,我们正在配置 insecure sslContext,然后将这个 httpClient 传递给 ReactorClientHttpConnector 使用全局。

另一个选项是配置TcpClient使用不安全的 sslContext 并使用它来创建 HttpClient实例,如下图所示:

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()

更多信息:

更新:相同代码的 Java 版本

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();

关于使用 ssl 的 Spring 5 WebClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45418523/

相关文章:

java - 由sequencegenerator生成的主键错误地写入数据库

java - IceSSL NullPointerException (java)

java - 阻塞式 Spring Data 和响应式 Spring Data 之间的区别?

ios - 尝试将值注入(inject)发布者,但接收到无序值

multithreading - 有关异步IO调用的更多详细信息

java - 直接注入(inject) JpaRepository<User>

java - 使用spring boot在TestNg测试用例中提供BeanFactory Bean

Spring Boot & Swagger 2 UI & 自定义 requestmappinghandlermapping - 映射问题

Apache 不会重新启动,ssl 错误

azure - 配置 Azure 流量管理器以使用 HTTPS