RestTemplate通过HTTPS协议访问接口
RestTemplate 默认不支持https协议,需要支持有两种方式,第一种是忽略认证,第二种是导入证书(比第一种安全)文章来源:https://www.toymoban.com/news/detail-515777.html
在这里只实现第一种方式,实现代码如下文章来源地址https://www.toymoban.com/news/detail-515777.html
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;
}
}
到了这里,关于RestTemplate通过HTTPS协议访问接口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!