RestTemplte是spring自带的一个http请求工具类,在用RestTemplte之前我也用过HttpCilent,okhttp和Hutool的http工具类,但这些都需要额外导包,如果只是简单需求的话完全可以使用spring自带的RestTemplte.默认RestTemplte只能发起http请求,想要实现https还需要做点配置:
首先你需要一个跳过https证书验证的工厂类,下面这个工厂类是我一开始接触后端请求http时在博客找到的,我自己也在用,也可以根据自己的业务需求修改
import com.alibaba.fastjson.JSONObject;
import com.longersoftware.logging.LogbackLogger;
import com.longersoftware.logging.LogbackLoggerFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import javax.net.ssl.*;
import java.net.HttpURLConnection;
import java.security.cert.X509Certificate;
//简单封装一下对https的支持
public class HttpsClientRequestFactory extends SimpleClientHttpRequestFactory {
private static final LogbackLogger logger = LogbackLoggerFactory.getLogger(SimpleClientHttpRequestFactory.class);
@Override
protected void prepareConnection(HttpURLConnection connection, String httpMethod) {
try {
//判断是否是https请求,是则进行如下配置,不是则使用http连接
if (connection instanceof HttpsURLConnection){
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
HttpsURLConnection conn = (HttpsURLConnection) connection;
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
conn.setRequestProperty("Accept-Charset", "utf-8");
conn.setRequestProperty("contentType", "utf-8");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setSSLSocketFactory(sc.getSocketFactory());
conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
}else {
super.prepareConnection(connection, httpMethod);
}
} catch (Exception e) {
logger.error(JSONObject.toJSONString(e).substring(0,300));
}
}
//跳过证书验证
private static class TrustAnyHostnameVerifier implements HostnameVerifier
{
@Override
public boolean verify(String hostname, SSLSession session)
{
return true;
}
}
private static class TrustAnyTrustManager implements X509TrustManager
{
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType)
{
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType)
{
}
@Override
public X509Certificate[] getAcceptedIssuers()
{
return new X509Certificate[] {};
}
}
}
然后在创建RestTemplate对象的时候以这种方式创建即可
RestTemplate restTemplates = new RestTemplate(new HttpsClientRequestFactory());
其他的操作都是和http请求一样的,这里就不具体介绍RestTemplate 的使用方法了,博客上的其他大佬已经写的详细了.
本文介绍了如何在Spring中利用RestTemplate发送HTTPS请求。通过设置一个跳过HTTPS证书验证的工厂类,可以避免导入额外的依赖。只需在创建RestTemplate实例时应用此配置,之后的请求操作与HTTP相同。
2978

被折叠的 条评论
为什么被折叠?



