繁体   English   中英

如何使用Apache Httpclient与Jersey 2.3客户端

[英]How to use Apache Httpclient with Jersey 2.3 client

我想使用带有Jersey 2.3客户端的Apache连接器进行HTTPS连接。

我尝试了以下方法:

ClientConfig clientConfig = new ClientConfig();
clientConfig.property(ApacheClientProperties.CONNECTION_MANAGER, new PoolingClientConnectionManager());

ApacheConnector connector = new ApacheConnector(clientConfig);  
clientConfig.connector(connector);  

Client client = ClientBuilder.newBuilder()
    .withConfig(clientConfig)
    .sslContext(sslContext)
    .hostnameVerifier(getHostnameVerifier())
    .build();

但是,似乎sslContext被忽略,因为服务器的证书被拒绝为不可信(sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径)

如果我删除“.withConfig(clientConfig)”部分,SSL连接工作正常,但显然没有Apache连接器。 有没有办法使用我自己的ClientConfig与Apache连接器以及我自己的SSLContext?

您需要为apache连接器配置SSL。

ClientConfig clientConfig = new ClientConfig();
clientConfig.property(ApacheClientProperties.CONNECTION_MANAGER, new PoolingClientConnectionManager());
//config your ssl for apache connector
SslConfigurator sslConfig = SslConfigurator.newInstance();
clientConfig.property(ApacheClientProperties.SSL_CONFIG, sslConfig);

ApacheConnector connector = new ApacheConnector(clientConfig);  
clientConfig.connector(connector);  

Client client = ClientBuilder.newBuilder()
.withConfig(clientConfig)
.hostnameVerifier(getHostnameVerifier())
.build();

不确定你是否使用apache连接器。 但您可以使用jersey和https进行客户端连接,如下所示:

ClientConfig config = new DefaultClientConfig();
SSLContext ctx = SSLContext.getInstance("SSL");
ctx.init(null, myTrustManager, null);
config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, new HTTPSProperties(hostnameVerifier, ctx));
Client client = Client.create(config);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM