欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

RestTemplate添加HTTPS證書全過程解析

 更新時間:2021年10月29日 11:31:30   作者:maeeki  
這篇文章主要介紹了RestTemplate添加HTTPS證書全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

RestTemplate添加HTTPS證書

證書的下載

先通過瀏覽器將未簽名驗證的證書保存到本地, 點擊 不安全–> 證書–> 詳細信息 --> 復(fù)制到文件 然后默認選擇 起一個文件名 , 保存即可, 比如我將證書保存在了桌面 , 命名為 xx.cer

證書導入JDK

若是想要在項目中用到證書 , 需要先將證書導入到JDK的證書管理里面, 導入命令如下:

keytool -import -noprompt -trustcacerts -alias xx -keystore /home/oracle/jdk1.8.0_181/jre/lib/security/cacerts -file xx.cer

對上面的命令做一個解釋 此命令是在linux服務(wù)器內(nèi)執(zhí)行的 , 在執(zhí)行這個命令的時候就在證書所在的文件夾下打開終端, 然后命名一下別名 , 別名最好和證書名稱一致 , 如上, 都叫xx , 另外將上面命令中的JDK路徑換成你的實際路徑即可

上面命令輸入完畢后回車 , 會讓你寫密碼啥的 , 就寫 changeit 若是changeit不行就寫 changeme 一般的 chageit 就可以了

生成keystore文件

只將證書導入JDK就可以了嗎? 我這里驗證的是不可以的, 必須還要生成對應(yīng)的 keystore文件

keystore文件生成命令: keytool -import -file xx.cer -keystore xx.keystore

對上面的命令做一個解釋 , 該命令也是在linux下執(zhí)行的 ,當然windows下也可以的 , 執(zhí)行的時候也是在證書所在文件夾進行的 , 若是提示權(quán)限不夠 那就再加sudo , windows就以管理員的身份執(zhí)行

回車后又會讓你輸入密碼 , 那么就還對應(yīng)著輸入 chageit 即可

執(zhí)行完畢后會在當前路徑下再產(chǎn)生一個xx.keystore文件

項目中配置

將上面上傳的xx.keystore 文件文件復(fù)制到你的項目的類路徑下

將下面的這個restTemplate的配置復(fù)制到你的項目中去,其中里面用到了一個httpConverter 這個是做json格式轉(zhuǎn)換的, 和HTTPS沒太大關(guān)系 , 若是不需要就將它以及相關(guān)代碼刪掉即可

package com.abc.air.config;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
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.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.ssl.SSLContextBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
/**
 * Created by ZhaoTengchao on 2019/4/12.
 */
@Configuration
public class RestTemplateConfig {
    @Autowired
    private FastJsonHttpMessageConverter httpMessageConverter;
    @Bean
    RestTemplate restTemplate() throws Exception {
    	HttpComponentsClientHttpRequestFactory factory = new                                                    
    	        HttpComponentsClientHttpRequestFactory();
    	    factory.setConnectionRequestTimeout(5 * 60 * 1000);
    	    factory.setConnectTimeout(5 * 60 * 1000);
    	    factory.setReadTimeout(5 * 60 * 1000);
    	    // https
    	    SSLContextBuilder builder = new SSLContextBuilder();
    	    KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
    	    ClassPathResource resource = new ClassPathResource("nonghang.keystore");
    	    InputStream inputStream = resource.getInputStream();
    	    keyStore.load(inputStream, null);
    	    SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(builder.build(), NoopHostnameVerifier.INSTANCE);
    	    Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
    	            .register("http", new PlainConnectionSocketFactory())
    	            .register("https", socketFactory).build();
    	    PoolingHttpClientConnectionManager phccm = new PoolingHttpClientConnectionManager(registry);
    	    phccm.setMaxTotal(200);
    	    CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).setConnectionManager(phccm).setConnectionManagerShared(true).build();
    	    factory.setHttpClient(httpClient);
    	    RestTemplate restTemplate = new RestTemplate(factory);
    	    List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters();
            ArrayList<HttpMessageConverter<?>> convertersValid = new ArrayList<>();
            for (HttpMessageConverter<?> converter : converters) {
                if (converter instanceof MappingJackson2HttpMessageConverter ||
                    converter instanceof MappingJackson2XmlHttpMessageConverter) {
                    continue;
                }
                convertersValid.add(converter);
            }
            convertersValid.add(httpMessageConverter);
            restTemplate.setMessageConverters(convertersValid);
    	    inputStream.close();
        return restTemplate;
    }
}

到此配置完畢!

RestTemplate訪問HTTPS

本文簡述一下怎么使用restTemplate來訪問https。

maven

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.3</version>
        </dependency>

這里使用httpclient的factory

配置

    @Bean
    public RestTemplate restTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
        TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;
        SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom()
                .loadTrustMaterial(null, acceptingTrustStrategy)
                .build();
        SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext);
        CloseableHttpClient httpClient = HttpClients.custom()
                .setSSLSocketFactory(csf)
                .build();
        HttpComponentsClientHttpRequestFactory requestFactory =
                new HttpComponentsClientHttpRequestFactory();
        requestFactory.setHttpClient(httpClient);
        RestTemplate restTemplate = new RestTemplate(requestFactory);
        return restTemplate;
    }

驗證

    @Test
    public void testHttps(){
        String url = "https://free-api.heweather.com/v5/forecast?city=CN101080101&key=5c043b56de9f4371b0c7f8bee8f5b75e";
        String resp = restTemplate.getForObject(url, String.class);
        System.out.println(resp);
    }

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java數(shù)據(jù)類型的規(guī)則

    Java數(shù)據(jù)類型的規(guī)則

    這篇文章主要介紹了Java數(shù)據(jù)類型的規(guī)則的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12
  • java中queue接口的使用詳解

    java中queue接口的使用詳解

    本篇文章主要介紹了java中queue接口的使用詳解,對學習Queue接口有一定的幫助,感興趣的小伙伴們可以參考一下。
    2016-11-11
  • intellij idea如何配置網(wǎng)絡(luò)代理

    intellij idea如何配置網(wǎng)絡(luò)代理

    intellij idea所在的這臺電腦本身上不了網(wǎng),要通過代理上網(wǎng),那么intellij idea怎么設(shè)置代理上網(wǎng)呢?今天通過本文給大家分享intellij idea如何配置網(wǎng)絡(luò)代理,感興趣的朋友一起看看吧
    2023-10-10
  • java高級用法之JNA中的Function

    java高級用法之JNA中的Function

    這篇文章主要介紹了java高級用法之JNA中的Function,JAVA中的映射在JNA中就是一個function。通過或者function對象,我們可以實現(xiàn)一些非常強大的功能,下面一起進入文章看看具體內(nèi)容吧
    2022-04-04
  • Tomcat中session的管理機制

    Tomcat中session的管理機制

    這篇文章主要為大家詳細介紹了Tomcat中session的管理機制 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Java實現(xiàn)簡易計算器(逆波蘭表達式)

    Java實現(xiàn)簡易計算器(逆波蘭表達式)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡易計算器,逆波蘭表達式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 基于Spring?Cache實現(xiàn)Caffeine+Redis二級緩存

    基于Spring?Cache實現(xiàn)Caffeine+Redis二級緩存

    本文主要介紹了基于Spring?Cache實現(xiàn)Caffeine+Redis二級緩存,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • SpringBoot中Filter?bean如何添加到Servlet容器

    SpringBoot中Filter?bean如何添加到Servlet容器

    這篇文章主要介紹了SpringBoot中Filter bean是怎么被添加到Servlet容器中的,本文分步驟結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Spring Web項目spring配置文件隨服務(wù)器啟動時自動加載

    Spring Web項目spring配置文件隨服務(wù)器啟動時自動加載

    這篇文章主要介紹了Spring Web項目spring配置文件隨服務(wù)器啟動時自動加載,加載spring的配置文件,并且只加載一次,從而提高程序效率。具體內(nèi)容詳情大家通過本文一起學習吧
    2018-01-01
  • java使用RandomAccessFile類基于指針讀寫文件實例代碼

    java使用RandomAccessFile類基于指針讀寫文件實例代碼

    這篇文章主要介紹了java使用RandomAccessFile類基于指針讀寫文件實例代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10

最新評論