当前位置: 首页 > news >正文

RestTemplate HTTPS请求忽略SSL证书

问题描述

使用RestTemplate发送HTTPS请求的时候,出现了这样的一个问题:

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

RestTemplate 默认不支持https协议

解决方案:

        第一种是忽略认证

        第二种是导入证书,比较复杂(比第一种安全) 


解决方案:

这里说一下第一种解决方案,忽略认证

RestTemplateConfig

package com.test.config;import java.nio.charset.Charset;
import java.util.List;import javax.net.ssl.SSLContext;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.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.ssl.TrustStrategy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;@Configuration
public class RestTemplateConfig{@Bean("restTemplate")public RestTemplate RestTemplate() {HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();httpRequestFactory.setConnectionRequestTimeout(30000);httpRequestFactory.setConnectTimeout(30000);httpRequestFactory.setReadTimeout(30000);return new RestTemplate(httpRequestFactory);}/*** 用于https请求,忽略认证* @return	unSSLRestTemplate*/@Bean("unSSLRestTemplate")public RestTemplate restTemplateHttps()  {RestTemplate restTemplate = null;try {TrustStrategy acceptingTrustStrategy = (chain, authType) -> true;SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build();SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);HttpClientBuilder clientBuilder = HttpClients.custom();CloseableHttpClient httpClient = clientBuilder.setSSLSocketFactory(sslsf).build();HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();httpRequestFactory.setConnectionRequestTimeout(30000);httpRequestFactory.setConnectTimeout(30000);httpRequestFactory.setReadTimeout(30000);httpRequestFactory.setHttpClient(httpClient);restTemplate = new RestTemplate(httpRequestFactory);//解决乱码List<HttpMessageConverter<?>> httpMessageConverters = restTemplate.getMessageConverters();httpMessageConverters.stream().forEach(httpMessageConverter ->{if(httpMessageConverter instanceof StringHttpMessageConverter){StringHttpMessageConverter messageConverter = (StringHttpMessageConverter)httpMessageConverter;messageConverter.setDefaultCharset(Charset.forName("UTF-8"));}});} catch (Exception e) {e.printStackTrace();}return restTemplate;}
}

测试代码

package com.test.service;import javax.annotation.Resource;import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;/*** http请求&https请求*/
@Service
public class TestService {//http请求@Resource(name = "restTemplate")private RestTemplate restTemplate;//https请求@Resource(name = "unSSLRestTemplate")private RestTemplate unSSLRestTemplate;/*** http请求*/public void interfaceHttp(JSONObject params) {//参数String json = params.toJSONString();//请求头HttpHeaders headers = new HttpHeaders();headers.add("Content-Type", MediaType.APPLICATION_JSON_VALUE);HttpEntity<String> formEntity = new HttpEntity<String>(json, headers);restTemplate.postForObject(URL, formEntity, String.class);}/*** https请求*/public void interfaceHttps(JSONObject params) {//参数String json = params.toJSONString();//请求头HttpHeaders headers = new HttpHeaders();headers.add("Content-Type", MediaType.APPLICATION_JSON_VALUE);HttpEntity<String> formEntity = new HttpEntity<String>(json, headers);unSSLRestTemplate.postForObject(URL, formEntity, String.class);}
}

说明:这里兼容http和https请求,只需要指定名称即可 

 

http://www.lryc.cn/news/117510.html

相关文章:

  • Jenkins触发器时间、次数设定
  • kafka partition的数据文件(offffset,MessageSize,data)
  • htnl根据轮播图图片切换背景色
  • gpu-manager安装及测试
  • Go和Java实现享元模式
  • Zookeeper特性与节点数据类型详解
  • 函数的递归
  • Android T 窗口层级其二 —— 层级结构树的构建(更新中)
  • ASIC芯片设计全流程项目实战课重磅上线 ,支持 65nm制程流片 !
  • 背上沉重的书包准备run之react篇
  • LAMP及论坛搭建
  • php-cgi.exe - FastCGI 进程超过了配置的请求超时时限
  • linux系统虚拟主机开启支持SourceGuardian(sg11)加密组件
  • 让我们一起探讨汽车充电桩控制主板的应用
  • Gartner发布《2023年全球RPA魔力象限》:90%RPA厂商,将提供生成式AI自动化
  • springboot整合JMH做优化实战
  • 利用ffmpeg分析视频流
  • 基于kettle实现pg数据定时转存mongodb
  • 使用 POI 在 Word 中重新开始编号、自定义标题格式
  • 【java】default/private/public/protected比较
  • 面试热题(最长上升子序列)
  • Vue 简版文件预览笔记
  • 数据结构--栈和队列
  • 泰国的区块链和NFT市场调研
  • 精彩回顾 | D-Day深圳 上海站:高频策略研发再提速
  • 新法!《个人信息保护合规审计管理办法(征求意见稿)》解读
  • 南大通用数据库-Gbase-8a-学习-37-delete误删数据恢复方法
  • 【高光谱图像的去噪算法】通过全变异最小化对受激拉曼光谱图像进行去噪研究(Matlab代码实现)
  • UEditorPlus v3.3.0 图片上传压缩重构,UI优化,升级基础组件
  • 百度翻译API整合SpringBoot