我们有一个通用应用程序,可以将消息传递到不同的 POST 端点。为此,我们正在使用 CloseableHttpAsyncClient。它的构建/初始化如下,
private static CloseableHttpAsyncClient get() {
CloseableHttpAsyncClient lInstance;
IOReactorConfig ioReactorConfig = IOReactorConfig.custom()
.setIoThreadCount(100)
.setConnectTimeout(10000)
.setSoTimeout(10000).build();
ConnectingIOReactor ioReactor = null;
try {
ioReactor = new DefaultConnectingIOReactor(ioReactorConfig);
} catch (IOReactorException e) {
logger_.logIfEnabled(Level.ERROR, e);
}
PoolingNHttpClientConnectionManager connManager = new PoolingNHttpClientConnectionManager(ioReactor);
connManager.setDefaultMaxPerRoute(50);
connManager.setMaxTotal(5000);
connManager.closeIdleConnections(10000, TimeUnit.MILLISECONDS);
baseRequestConfig = RequestConfig.custom().setConnectTimeout(10000)
.setConnectionRequestTimeout(10000)
.setSocketTimeout(10000).build();
lInstance = HttpAsyncClients.custom().setDefaultRequestConfig(baseRequestConfig)
.setConnectionManager(connManager).build();
lInstance.start();
return lInstance;
}
这是预构建和初始化的。当一个新的请求到达我们的应用程序时,根据消息、身份验证类型,构建一个新的 postRequesthttpPost = new HttpPost(builder.build());
设置所需的标头、有效负载等后,使用退出的 httpClient 发送请求。
httpClient.execute(httpPost, httpContext, null);
现在,问题是基于我们支持基于客户端证书的身份验证的新要求。由于我们目前的方法是在开始时创建 httpClient,问题是如何更改 httpClient 的行为以将客户端证书发送到某些端点并像其他不需要发送证书的端点一样工作?
我知道我可以在创建时将 SSLContext 引入 CloseableHttpAsyncClient,但是在创建时我没有任何信息表明我们有任何需要基于证书的身份验证的端点。我们可以有许多端点来支持客户端证书,并且在运行时就知道了。