当前位置: 首页 > 知识库问答 >
问题:

如何执行TLS1。2.使用Rest模板创建Rest客户端

宗政学
2023-03-14

我正在使用Spring3.0 restTemboard通过调用post方法消费json webservice。

        MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
        headers.add("Content-Type", MediaType.APPLICATION_JSON_VALUE);      
        HttpEntity<Object> entity = new HttpEntity<Object>(requestAsString, headers);
        postForObject = restTemplate.postForObject(url, entity, responseClass );

我们的应用程序部署在WAS服务器中,并试图通过创建与TLS1的套接字连接来连接producer。0.但是,现在producer只支持TLS1。1和TLS1。2.

如何强制restTempate使用TLS1。1或TLS 1.2。

通常,对于apache httpClient代码,创建自定义PromatcolSocketFactory并覆盖createSocket方法。但是,在RestTemboard的情况下,如何实现相同的。

共有3个答案

柳深
2023-03-14

@如果你的问题还没解决的话。

    RestTemplate restTemplate = new RestTemplate();
    DefaultHttpClient httpClient = new DefaultHttpClient();
    // We're going to try and load and enable TLS version 1.2 standard communication context from JSSE Providers
    // This is enabled only for download media Mirakl as some merchants don't accept communication with TLS versions prior to 1.1
    try {
        SSLContext context;
        context = SSLContext.getInstance("TLSv1.2");
        context.init(null, null, null);

        SSLSocketFactory ssf = new SSLSocketFactory(context);
        ClientConnectionManager ccm = httpClient.getConnectionManager();
        SchemeRegistry sr = ccm.getSchemeRegistry();
        sr.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));
        sr.register(new Scheme("https", 443, ssf));

    } catch (NoSuchAlgorithmException | KeyManagementException e) {
        LOGGER.warn("Could not load the TLS version 1.2 due to => ", e);
    }

    restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));
章高朗
2023-03-14

您可以将RestTemplate配置为使用自定义的ClientHttpRequestFactory。特别是(因为您使用的是Spring 3.0),这里有一个CommonClientHttPrequestFactory。这将使您能够详细配置commons HTTP,您的RestTemplate将使用它来执行其请求。

请注意,在Spring的更高版本中,实际的实现类已经发生了变化(如果您仍然使用3.0,那么您真的应该考虑更新)。从3.1开始,实现类被称为HttpComponentsClientHttpRequestFactory

龙佐
2023-03-14

带着Spring

import javax.net.ssl.SSLContext;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

SSLContext context = SSLContext.getInstance("TLSv1.2");
context.init(null, null, null);

CloseableHttpClient httpClient = HttpClientBuilder.create().setSSLContext(context)
    .build();
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
RestTemplate restTemplate = new RestTemplate(factory);
.....
 类似资料:
  • 问题内容: 我通过调用post方法使用Spring3.0 restTemplate使用json webservice。 我们的应用程序已部署在WAS服务器中,并尝试通过使用TLS1.0创建套接字连接来连接生产者。但是,现在生产者仅支持TLS1.1和TLS1.2。 如何强制执行restTempate以使用TLS1.1或TLS 1.2。 通常,对于apache httpclient代码,创建自定义Pr

  • 如何使用JAX-RS Client Fluent API为外部世界REST服务创建rest客户端? 例如,假设一个服务返回一个person对象,该对象有两个字段名和年龄。 无论我遇到什么样的例子/教程,他们做同样的事情,下面的片段或他们开发客户端在同一个项目,以取代tring.classperson.class.我应该如何创建独立的客户端,将返回我pojo的人。

  • 问题内容: 我正在启动一个使用Java实现的Restful架构的项目(使用新的JAX-RS标准) 我们计划使用Flex应用程序开发GUI。我已经发现使用HTTPService组件实现此问题(响应错误代码,标头访问…)。 你们中的任何一个在类似项目中都有一些经验。可行吗 问题答案: 这里的问题是,围绕此问题的许多网络讨论都已经有一年或更久的历史了。我现在正在做同样的研究,这就是我今天所学到的。 Jo

  • 嗨,我有一个restendpointxyz。com/test/create,其中预期的内容类型为application/json,内容为 在具有数组的body中还有一些其他字段。 我在Spring rest控制器中使用rest模板来访问上述endpoint,我还想传递数据。我不确定endpoint端使用什么域模型将json中的数据从客户端映射到服务器端。 如何使用rest模板使用上述数据命中上述e

  • Spring参考提到应该通过进行定制。如何用一个构建器管理来自多个IP地址的多个URI? 如何通过向所有全局添加,这是一个好的实践吗? 多谢帮忙。 我考虑为每个服务器设置一个。我不想手动执行此操作--我更喜欢使用Spring机制。 有人帮忙吗?

  • 在es中搜索时,如何使用spring的rest模板或elasticsearch自己的高/低rest客户端,我左右为难。与spring rest模板相比,es客户端是否提供了HTTP连接池、性能等方面的任何优势。这两个模板中的哪一个在从服务器获取响应时花费的时间更少。请有人解释一下?