使用RestTemplate访问HTTPS服务

上一篇文章已经通过配置SSL证书,完成了浏览器以https方式对后台服务接口的访问。在此基础之上,本篇介绍如何配置RestTemplate 完成对后台服务接口的访问。

配置步骤如下:

一. 访问https接口,并从浏览器导出 .cer证书文件

 

 

 

 二. 将cer证书导入到jdk的证书管理库,以管理员身份运行CMD窗口

 命令:keytool -import -v -trustcacerts -alias testhttps -file "D:/tmp/ssl/testhttps.cer" -storepass changeit -keystore "C:/Program Files/Java/jdk1.8.0_131/jre/lib/security/cacerts"

三. 创建项目,编写相应代码和配置

 1. pom.xml文件添加httpclient依赖包

        <!-- http -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.4</version>
        </dependency>

 2. 编写RestTemplate配置类

import org.apache.http.client.HttpClient;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.ssl.SSLContextBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;

/**
 * restTemplate配置
 */
@Configuration
public class RestTemplateConfig {

    /**
     * 使用ssl对证书进行验证,需要将证书导出到jdk管理仓库,
     * 命令:keytool -import -v -trustcacerts -alias mytest -file "D:/tmp/mytest.cer"  -keystore "C:/Program Files/Java/jdk1.8.0_131/jre/lib/security/cacerts"
     */
    @Bean("restTemplate")
    @Primary
    public RestTemplate restTemplate() throws NoSuchAlgorithmException, KeyManagementException {
        HttpComponentsClientHttpRequestFactory httpRequestFactory = new
                HttpComponentsClientHttpRequestFactory();
        httpRequestFactory.setConnectionRequestTimeout(6 * 1000); //获取连接池连接的超时时间(毫秒)
        httpRequestFactory.setConnectTimeout(6 * 1000);  //连接上服务器(握手成功)的时间(毫秒)
        httpRequestFactory.setReadTimeout(60 * 1000); //返回数据时间(毫秒)
        httpRequestFactory.setHttpClient(httpClient());
        RestTemplate restTemplate = new RestTemplate(httpRequestFactory);
        return restTemplate;
    }


    @Bean
    public HttpClient httpClient() throws KeyManagementException, NoSuchAlgorithmException {
        SSLContextBuilder contextBuilder = new SSLContextBuilder();
        SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(contextBuilder.build(), NoopHostnameVerifier.INSTANCE);
        Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
                .register("http", new PlainConnectionSocketFactory())
                .register("https", socketFactory).build();
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
        connectionManager.setMaxTotal(200);
        connectionManager.setDefaultMaxPerRoute(100);
        CloseableHttpClient httpClient = HttpClientBuilder.create().setConnectionManager(connectionManager).build();
        return httpClient;
    }
}

  3.  编写Controller控制类

import com.ssl.demo.entity.UserInfo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@RestController
public class UserController {

    @Resource(name = "restTemplate")
    private RestTemplate restTemplate;

    @RequestMapping("getUserInfo")
    public UserInfo getUserInfo() {
        String url = "https://localhost:9090/ssl-service/getUserInfo"; //服务端接口
        UserInfo data = restTemplate.getForObject(url , UserInfo.class);
        return data;
    }

}

  4. application.yml配置文件

server:
  port: 8080
  servlet:
    context-path: /ssl-client

 四. 验证 运行效果

  启动客户端和服务端项目,在浏览器访问客户端接口:http://localhost:8080/ssl-client/getUserInfo

 验证成功,下一篇文章更新客户端使用RestTemplate 如何绕过证书校验 访问https服务。

完整示例下载地址:

链接:https://pan.baidu.com/s/1xrfxkbnz1bGhhrTKKKhPew 

提取码:tyoe

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot中的RestTemplate是一个用于访问RESTful Web服务的客户端。它提供了一种简单的方式来访问RESTful Web服务,并且可以与Spring框架无缝集成。使用RestTemplate,我们可以发送HTTP请求并接收响应,以便在我们的应用程序中使用它们。 使用RestTemplate,我们可以执行以下操作: 1. 发送HTTP GET请求并接收响应。 2. 发送HTTP POST请求并接收响应。 3. 发送HTTP PUT请求并接收响应。 4. 发送HTTP DELETE请求并接收响应。 我们可以使用RestTemplate访问各种RESTful Web服务,例如Twitter,Facebook,GitHub等。它还支持各种数据格式,例如JSON,XML等。 要使用RestTemplate,我们需要在Spring Boot应用程序中添加以下依赖项: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 然后,我们可以在我们的应用程序中创建一个RestTemplate实例,并使用它来发送HTTP请求。例如,以下代码片段演示了如何使用RestTemplate发送HTTP GET请求: ``` RestTemplate restTemplate = new RestTemplate(); String url = "https://api.github.com/users/octocat"; String response = restTemplate.getForObject(url, String.class); System.out.println(response); ``` 在这个例子中,我们创建了一个RestTemplate实例,并使用它来发送HTTP GET请求到GitHub API。我们指定了API的URL,并使用getForObject()方法发送请求。该方法返回一个响应对象,我们将其转换为字符串并打印出来。 总之,RestTemplate是一个非常有用的工具,可以帮助我们轻松地访问RESTful Web服务。它是Spring Boot框架的一部分,因此可以与其他Spring组件无缝集成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值