SpringBoot系列之RestTemplate調(diào)https接口
業(yè)務(wù):本系統(tǒng)接口都是http的,調(diào)用第三方接口,因為做了安全性校驗,所以不能通過RestTemplate調(diào)用
方法:重寫覆蓋SimpleClientHttpRequestFactory抽象類的prepareConnection方法
package com.minstone.apprBase.common.utils.http.rest;
import org.apache.http.conn.ssl.SSLContexts;
import org.apache.http.conn.ssl.TrustStrategy;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import java.net.HttpURLConnection;
import java.security.KeyStore;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
/**
* 兼容調(diào)Https接口
* @Author mazq
* @Date 2020/06/04 17:16
* @Param
* @return
*/
public class HttpsClientRequestFactory extends SimpleClientHttpRequestFactory {
@Override
protected void prepareConnection(HttpURLConnection connection, String httpMethod) {
try {
if (!(connection instanceof HttpsURLConnection)) {// http協(xié)議
//throw new RuntimeException("An instance of HttpsURLConnection is expected");
super.prepareConnection(connection, httpMethod);
}
if (connection instanceof HttpsURLConnection) {// https協(xié)議,修改協(xié)議版本
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
// 信任任何鏈接
TrustStrategy anyTrustStrategy = new TrustStrategy() {
@Override
public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
return true;
}
};
SSLContext ctx = SSLContexts.custom().useTLS().loadTrustMaterial(trustStore, anyTrustStrategy).build();
((HttpsURLConnection) connection).setSSLSocketFactory(ctx.getSocketFactory());
HttpsURLConnection httpsConnection = (HttpsURLConnection) connection;
super.prepareConnection(httpsConnection, httpMethod);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
關(guān)鍵代碼,new RestTemplate(new HttpsClientRequestFactory());,對應(yīng)工具類參考:
package com.minstone.apprBase.common.utils.http.rest;
import com.minstone.apprBase.common.utils.web.WebUtil;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
/**
*
* RestTemplate 遠程調(diào)用工具類
*
*
*
* @author mazq
* 修改記錄
* 修改后版本: 修改人:修改日期: 2020/06/01 11:38 修改內(nèi)容:
*
*/
@Component
public class RestTemplateUtils {
public static RestTemplate geTemplate(){
return new RestTemplate(new HttpsClientRequestFactory());
}
/**
* GET請求調(diào)用方式
* @Author mazq
* @Date 2020/06/01 13:47
* @Param [url, responseType, uriVariables]
* @return org.springframework.http.ResponseEntity
*/
public static ResponseEntity getForEntity(String url, Class responseType, Map uriVariables) {
return geTemplate().getForEntity(url, responseType, uriVariables);
}
/**
* POST請求調(diào)用方式
* @Author mazq
* @Date 2020/06/01 13:47
* @Param [url, headers, body, responseType]
* @return org.springframework.http.ResponseEntity
*/
public static ResponseEntity postForEntity(String url,HttpHeaders headers, Object requestBody , Class responseType ){
HttpEntity 
騰訊、阿里、滴滴后臺面試題匯總總結(jié) — (含答案)
面試:史上最全多線程面試題 !
最新阿里內(nèi)推Java后端面試題
JVM難學?那是因為你沒認真看完這篇文章

關(guān)注作者微信公眾號 —《JAVA爛豬皮》
了解更多java后端架構(gòu)知識以及最新面試寶典


看完本文記得給作者點贊+在看哦~~~大家的支持,是作者源源不斷出文的動力
作者:SmileNicky
出處:https://www.cnblogs.com/mzq123/p/13152885.html
評論
圖片
表情
