RestTemplate通过HTTPS协议访问接口
RestTemplate通过HTTPS协议访问接口
RestTemplate 默认不支持https协议,需要支持有两种方式,第一种是忽略认证,第二种是导入证书(比第一种安全)
在这里只实现第一种方式,实现代码如下
package com.muge.other.controller; import com.alibaba.fastjson.JSONObject; 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.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.client.RestTemplate; import javax.net.ssl.SSLContext; @Controller @RequestMapping("/rest") public class RestTemplateTest { @RequestMapping(value = "/test.info",method = RequestMethod.GET) @ResponseBody public void test(){ RestTemplate restTemplateHttps= restTemplateHttps(); HttpHeaders headers = new HttpHeaders(); headers.add("Content-Type", "application/json;charset=UTF-8"); /*MultiValueMap<String, Object> map = new LinkedMultiValueMap<>(); map.add("userName", "admin"); map.add("password", "123456"); HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(map,headers); String resp =restTemplateHttps.postForObject("https://192.168.2.102:18531/loginInfo/login/v1.0", httpEntity, String.class); System.out.println(resp);*/ JSONObject jsonObject = new JSONObject(); jsonObject.put("userName","admin"); jsonObject.put("password","123456"); JSONObject jsonObject1 = restTemplateHttps.postForObject("https://192.168.2.102:18531/loginInfo/login/v1.0",new HttpEntity<>(jsonObject,headers),JSONObject.class); System.out.println(jsonObject1); } 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 requestFactory = new HttpComponentsClientHttpRequestFactory(); requestFactory.setHttpClient(httpClient); restTemplate = new RestTemplate(requestFactory); } catch (Exception e) { e.printStackTrace(); } return restTemplate; } }
上一篇:
Java架构师技术进阶路线图
下一篇:
DPDK部署脚本执行时出现报错解决方案