在春季,resttemplate发出的每个请求都发送客户证书的正确方法是什么?

在春季,resttemplate发出的每个请求都发送客户证书的正确方法是什么?,第1张

在春季,resttemplate发出的每个请求都发送客户证书的正确方法是什么?

这是使用RestTemplate和Apache
HttpClient的
方法示例

您应该

RestTemplate
使用配置的SSL上下文定义自己的:

@Beanpublic RestTemplate restTemplate(RestTemplateBuilder builder) throws Exception {    char[] password = "password".toCharArray();    SSLContext sslContext = SSLContextBuilder.create() .loadKeyMaterial(keyStore("classpath:cert.jks", password), password) .loadTrustMaterial(null, new TrustSelfSignedStrategy()).build();    HttpClient client = HttpClients.custom().setSSLContext(sslContext).build();    return builder .requestFactory(new HttpComponentsClientHttpRequestFactory(client)) .build();} private KeyStore keyStore(String file, char[] password) throws Exception {    KeyStore keyStore = KeyStore.getInstance("PKCS12");    File key = ResourceUtils.getFile(file);    try (InputStream in = new FileInputStream(key)) {        keyStore.load(in, password);    }    return keyStore;}

现在,此模板执行的所有远程呼叫将使用签名

cert.jks
注意 :您需要将其
cert.jks
放入类路径中

@Autowiredprivate RestTemplate restTemplate;public List<Info> getInfo() throws RestClientException, URISyntaxException {    HttpEntity<?> httpEntity = new HttpEntity<>(null, new HttpHeaders());    ResponseEntity<Info[]> resp = restTemplate.exchange( new URI(base_URL + "/Info"), HttpMethod.GET,  httpEntity, Info[].class);    return Arrays.asList(resp.getBody());}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5489932.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存