Как сделать так, чтобы мой RegistryBuilder был автоматически подключен к HttpClientFeignLoadBalancedConfiguration от feign? - PullRequest
1 голос
/ 19 октября 2019

Я пытаюсь установить взаимное соединение TLS с конечной точкой, к которой мы подключаемся, используя симулированный клиент с apache httpclient.

Я попытался выполнить эту конфигурацию, которая не работает, она просто заканчивается *Сообщение 1003 * и, насколько я могу судить, просто не использует мое хранилище ключей во время запроса. Мой анализ состоит в том, что это потому, что .setSSLSocketFactory(getSSLConnectionSocketFactory()) и .setConnectionManager(connectionManager) не очень хорошо играют вместе в этой конфигурации:

@Primary
public Client feignClient(
    CachingSpringLoadBalancerFactory cachingFactory, SpringClientFactory clientFactory,
    BeanFactory beanFactory, 
    @Qualifier("customApacheHttpClient") ApacheHttpClient apacheHttpClient) {
    return new TraceLoadBalancerFeignClient(apacheHttpClient, cachingFactory, clientFactory, beanFactory);
}

/**
 * @param connectionManager is autowired from HttpClientFeignLoadBalancedConfiguration.HttpClientFeignConfiguration
 */
@Bean(name = "customApacheHttpClient")
public ApacheHttpClient apacheHttpClient(
    HttpClientConnectionManager connectionManager,
    FeignHttpClientProperties httpClientProperties) {
    RequestConfig defaultRequestConfig = RequestConfig.custom()
        .setConnectTimeout(httpClientProperties.getConnectionTimeout())
        .setRedirectsEnabled(httpClientProperties.isFollowRedirects())
        .build();
    return new ApacheHttpClient(
        HttpClients.custom()
            .setConnectionManager(connectionManager)
            .setDefaultRequestConfig(defaultRequestConfig)
            .setSSLSocketFactory(getSSLConnectionSocketFactory())
            .build());
}

В качестве решения я удалил setSSLSocketFactory и вместо этого добавил компонент RegistryBuilderОднако, похоже, он не подобран. Как я могу получить этот bean-компонент:

@Bean
public RegistryBuilder registryBuilder(SSLConnectionSocketFactory sslConnectionSocketFactory) {
    return RegistryBuilder.create()
        .register("http", PlainConnectionSocketFactory.INSTANCE)
        .register("https2", sslConnectionSocketFactory)
        .register("https", sslConnectionSocketFactory);
}

Впрыскивается сюда:

package org.springframework.cloud.openfeign.ribbon;

import ...

class HttpClientFeignLoadBalancedConfiguration {
  ...
    protected static class HttpClientFeignConfiguration {
    ...
        @Autowired(required = false)
        private RegistryBuilder registryBuilder;

...

Любые указатели приветствуются, или любой проект GitHub, который устанавливает TLSv1.2 с сертификатами на стороне клиента, симулируети ApacheHttpClient был бы очень полезен.

...