上截图
目录文件结构
在配置文件下创建下面两个文件
文件内容
HttpsClientHttpRequestFactory.java
java
package org.fri.config;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.ssl.TrustStrategy;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.security.KeyStore;
/**
* 处理无法发送https 请求问题
* 忽略 https 校验
*/
@Configuration
public class HttpsClientHttpRequestFactory extends SimpleClientHttpRequestFactory {
@Override
protected void prepareConnection(HttpURLConnection connection, String httpMethod) throws IOException {
try {
if (connection instanceof HttpsURLConnection) {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
//信任任何链接,忽略对证书的校验
TrustStrategy trustStrategy = (x509Certificates, s) -> true;
//自定义sslcontext
SSLContext ctx = SSLContexts.custom().loadTrustMaterial(trustStore, trustStrategy).build();
//解决问题
((HttpsURLConnection) connection).setSSLSocketFactory(ctx.getSocketFactory());
//解决No subject alternative names matching IP address xxx.xxx.xxx.xxxx found问题
((HttpsURLConnection) connection).setHostnameVerifier((s, sslSession) -> true);
HttpsURLConnection httpsURLConnection = (HttpsURLConnection) connection;
super.prepareConnection(httpsURLConnection, httpMethod);
} else {
super.prepareConnection(connection, httpMethod);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
ResTemplateConfig.java
java
package org.fri.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ResTemplateConfig {
@Bean
RestTemplate restTemplate() {
return new RestTemplate(new HttpsClientHttpRequestFactory());
}
}
配置完成
请求示例
java
HttpHeaders headers = new HttpHeaders();
HttpEntity<String> requestEntity = new HttpEntity<>(headers);
ResponseEntity<JSONObject> responseEntity = restTemplate.exchange(reqUri, HttpMethod.GET, requestEntity, JSONObject.class);
if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
log.info(responseEntity.getBody().toJSONString());
}
完结撒花!!!