在运行时在 CloseableHttpAsyncClient 中添加 SSLContext

问题描述

我们有一个通用应用程序,可将消息传送到不同的 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;
        }

这是预先构建和初始化的。当新请求到达我们的应用程序时,根据消息、身份验证类型,构建一个新的 postRequest httpPost = new HttpPost(builder.build());

设置好需要的header、payload等后,退出httpClient就可以发送请求了。 httpClient.execute(httpPost,httpContext,null);

现在,问题是基于我们支持基于客户端证书的身份验证的新要求。并且由于我们目前的方法是在开始时创建 httpClient,问题是如何更改 httpClient 的行为以将客户端证书发送到某些端点,并像其他端点一样工作,不需要发送证书?

我知道我可以在创建时将 SSLContext 引入 CloseableHttpAsyncclient,但在创建时我没有任何信息表明我们有任何需要基于证书的身份验证的端点。我们可以有许多支持客户端证书并且在运行时已知的端点。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)