apache-httpclient-4.x - 如何将 SSL 与 Jersey 2.x 和 Apache 连接管理器一起使用

标签 apache-httpclient-4.x jersey-2.0 jersey-client

我想对我的 Jersey 2.x 休息客户端使用连接池。我有以下代码:

ClientConfig clientConfig = new ClientConfig();
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
connectionManager.setMaxTotal(100);
connectionManager.setDefaultMaxPerRoute(20);
clientConfig.property(ApacheClientProperties.CONNECTION_MANAGER, connectionManager);

clientConfig.connectorProvider(new ApacheConnectorProvider());  

Client client = ClientBuilder.newBuilder()
    .withConfig(clientConfig)
    .sslContext(SslConfigurator.getDefaultContext())
    .build();

但这不适用于需要客户端证书的站点。如果我不使用 PoolingHttpClientConnectionManager(即像这样注释掉它:)

//clientConfig.property(ApacheClientProperties.CONNECTION_MANAGER, connectionManager);

然后发送客户端证书。

如何设置 PoolingHttpClientConnectionManager 以使用 javax.net.ssl... 属性?

最佳答案

使用配置有系统属性的 SSL 套接字工厂

Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
        .register("http", PlainConnectionSocketFactory.getSocketFactory())
        .register("https", SSLConnectionSocketFactory.getSystemSocketFactory())
        .build();
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(socketFactoryRegistry);

关于apache-httpclient-4.x - 如何将 SSL 与 Jersey 2.x 和 Apache 连接管理器一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30877685/

相关文章:

java - 休息客户端 java.net.ConnectException : Connection timed out: connect

java - yml - 多个键映射到相同的值

java - Spring MVC RestFul服务+Jersey客户端400错误请求

java - SSL 握手异常 : hostname in certificate didn't match

java - Jersey 客户端发布表单数据

spring - Jersey中是否有类似于Spring的HandlerInterceptor的Interceptor

java - Jersey 2 : how to bind injection classes without package scanning?

java - httpclient 版本与 Apache Spark 之间的冲突

java - ValidatorException HTTPClient Java

java - Apache HttpClient 4.3 SocketConfig.getSoTimeout() 与 RequestConfig.getSocketTimeout()