最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

RestTemplate添加HTTPS證書全過程解析

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

RestTemplate添加HTTPS證書

證書的下載

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

證書導(dǎo)入JDK

若是想要在項(xiàng)目中用到證書 , 需要先將證書導(dǎo)入到JDK的證書管理里面, 導(dǎo)入命令如下:

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

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

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

生成keystore文件

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

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

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

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

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

項(xiàng)目中配置

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

將下面的這個(gè)restTemplate的配置復(fù)制到你的項(xiàng)目中去,其中里面用到了一個(gè)httpConverter 這個(gè)是做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

本文簡(jiǎn)述一下怎么使用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;
    }

驗(yàn)證

    @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);
    }

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

相關(guān)文章

  • Java結(jié)合redistemplate使用分布式鎖案例講解

    Java結(jié)合redistemplate使用分布式鎖案例講解

    在Java中使用RedisTemplate結(jié)合Redis來實(shí)現(xiàn)分布式鎖是一種常見的做法,特別適用于微服務(wù)架構(gòu)或多實(shí)例部署的應(yīng)用程序中,以確保數(shù)據(jù)的一致性和避免競(jìng)態(tài)條件,下面給大家分享使用Spring Boot和RedisTemplate實(shí)現(xiàn)分布式鎖的案例,感興趣的朋友一起看看吧
    2024-08-08
  • Java的堵塞隊(duì)列BlockingQueue詳解

    Java的堵塞隊(duì)列BlockingQueue詳解

    這篇文章主要介紹了Java的堵塞隊(duì)列BlockingQueue詳解,阻塞隊(duì)列常用于生產(chǎn)者和消費(fèi)者的場(chǎng)景,生產(chǎn)者是向隊(duì)列里添加元素的線程,消費(fèi)者是從隊(duì)列里取元素的線程,需要的朋友可以參考下
    2023-12-12
  • java獲取反射機(jī)制的3種方法總結(jié)

    java獲取反射機(jī)制的3種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于java獲取反射機(jī)制的3種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Java8中對(duì)泛型目標(biāo)類型推斷方法的改進(jìn)

    Java8中對(duì)泛型目標(biāo)類型推斷方法的改進(jìn)

    這篇文章主要介紹了Java8中對(duì)泛型目標(biāo)類型推斷方法的改進(jìn),需要的朋友可以參考下
    2014-06-06
  • 解析SpringBoot中使用LoadTimeWeaving技術(shù)實(shí)現(xiàn)AOP功能

    解析SpringBoot中使用LoadTimeWeaving技術(shù)實(shí)現(xiàn)AOP功能

    這篇文章主要介紹了SpringBoot中使用LoadTimeWeaving技術(shù)實(shí)現(xiàn)AOP功能,AOP面向切面編程,通過為目標(biāo)類織入切面的方式,實(shí)現(xiàn)對(duì)目標(biāo)類功能的增強(qiáng),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Mybatis使用typeHandler加密的實(shí)現(xiàn)

    Mybatis使用typeHandler加密的實(shí)現(xiàn)

    本文詳細(xì)介紹了如何在Mybatis中使用typeHandler對(duì)特定字段進(jìn)行加密處理,涵蓋了從引入依賴、配置Mybatis,到實(shí)現(xiàn)typeHandler繼承類和配置mapper層的詳細(xì)步驟,為需要在項(xiàng)目中實(shí)現(xiàn)字段加密的開發(fā)者提供了參考和借鑒
    2024-09-09
  • Java8 日期、時(shí)間操作代碼

    Java8 日期、時(shí)間操作代碼

    在Java8之前,日期時(shí)間API一直被開發(fā)者詬病,包括:java.util.Date是可變類型,SimpleDateFormat非線程安全等問題。故此,Java8引入了一套全新的日期時(shí)間處理API,新的API基于ISO標(biāo)準(zhǔn)日歷系統(tǒng)
    2021-09-09
  • SpringBoot使用統(tǒng)一異常處理詳解

    SpringBoot使用統(tǒng)一異常處理詳解

    這篇文章主要為大家詳細(xì)介紹了SpringBoot使用統(tǒng)一異常處理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Spring Boot的filter(過濾器)簡(jiǎn)單使用實(shí)例詳解

    Spring Boot的filter(過濾器)簡(jiǎn)單使用實(shí)例詳解

    過濾器(Filter)的注冊(cè)方法和 Servlet 一樣,有兩種方式:代碼注冊(cè)或者注解注冊(cè),下面通過實(shí)例給大家介紹Spring Boot的filter(過濾器)簡(jiǎn)單使用,一起看看吧
    2017-04-04
  • Java7到Java17之Switch語句進(jìn)化史示例詳解

    Java7到Java17之Switch語句進(jìn)化史示例詳解

    這篇文章主要為大家介紹了Java7到Java17之Switch語句進(jìn)化史示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評(píng)論

龙南县| 明星| 恭城| 洛扎县| 凤庆县| 星子县| 荆门市| 中方县| 宝丰县| 杭锦后旗| 舒城县| 修武县| 苏尼特右旗| 公主岭市| 惠州市| 东港市| 南安市| 利辛县| 武城县| 大兴区| 榆中县| 肥东县| 沁阳市| 电白县| 阜宁县| 邹平县| 绥化市| 上饶市| 安义县| 扬州市| 扶风县| 牟定县| 自贡市| 华容县| 哈尔滨市| 泰顺县| 读书| 大宁县| 宁强县| 大安市| 洛扎县|