проблема с TLS и перехватчиком - PullRequest
0 голосов
/ 10 января 2019

Добрый день, у меня проблема с моим кодом restTemplate, я запрашиваю веб-сервис, которому нужен TLS1.2, и я добавляю ssl в мой код с помощью CloseableHttpClient и работает нормально, но теперь мне нужно добавить перехватчики для журнала запрос и ответ, и есть проблема с этим. Тело ответа является потоком, и если вы прочитаете его в перехватчике, RestTemplate не сможет десериализовать его в вашу объектную модель. Другими словами, я получаю объект ноль. Решение, которое я нашел, - это использование BufferingClientHttpRequestFactory для моей restTemplate, но я не знаю, как добавить TLS1.2

вот мой код:

Конструктор


    HttpComponentsClientHttpRequestFactory factory;

    SSLContext sslContext = null;
            try {
                sslContext = SSLContext.getInstance("TLSv1.2");
                sslContext.init(null, null, null);

                SSLConnectionSocketFactory connectionFactory = new SSLConnectionSocketFactory(sslContext,
                        new AllowAllHostnameVerifier());
                Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory> create().register("https", connectionFactory).build();
                PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);

                CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connectionManager).build();
                factory = new HttpComponentsClientHttpRequestFactory(httpClient);

            } catch (Exception e) {
                e.printStackTrace();
            }

RestTemplate call


    BargainFinderMaxRS bargainFinderMaxRS = new BargainFinderMaxRS();
            try {
                RestTemplate restTemplate = new RestTemplate(factory);
                HttpHeaders headers = createHttpHeadersForBargainFinderMax(authentication);
                HttpEntity<BargainFinderMaxRQ> request = 
                        new HttpEntity<BargainFinderMaxRQ>(bargainFinderMaxRQ, headers);

                restTemplate.setInterceptors(Collections.singletonList(
                        new ClientHttpInterceptor()));
                bargainFinderMaxRS = 
                        restTemplate.postForObject(bargainFinderMaxProperties.getUrl(), request, BargainFinderMaxRS.class);

            } catch (Exception e) {
                e.printStackTrace();
            }
            return bargainFinderMaxRS;


в этом коде bargainFinderMaxRS возвращает ноль Кто-нибудь может мне помочь?

...