【发布时间】:2021-05-07 17:48:27
【问题描述】:
如何通过在接口中使用@RegisterRestClient 来注入自定义sslContext?
【问题讨论】:
标签: java quarkus microprofile
如何通过在接口中使用@RegisterRestClient 来注入自定义sslContext?
【问题讨论】:
标签: java quarkus microprofile
Quarkus 或 Microprofile 也不允许您以编程方式构建其余客户端(这是为您提供自动实现的界面的目的)。 您仍然可以自己实现 rest-client 接口并设置您的 javax.net.ssl.SSLContext。
以下示例旨在提供信任所有主机的 SSLContext:
package org.me.rest;
import java.net.URI;
import java.security.KeyManagementException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.annotation.Priority;
import javax.enterprise.context.ApplicationScoped;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.eclipse.microprofile.rest.client.RestClientBuilder;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import org.me.rest.MyRestClient;
@Priority(value = 1) //choose an appropriate value here
@RestClient
@ApplicationScoped
public class MyRestClientImpl implements MyRestClient {
@Override
public Response getTheResource() {
SSLContext sslContext = null;
try {
sslContext = SSLContext.getInstance("TLS");
TrustManager tm = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
sslContext.init(null, new TrustManager[] {
tm
}, null);
} catch (Exception e) {
e.printStackTrace();
}
AuthRestClient client =
RestClientBuilder.newBuilder().baseUri(URI.create("https://hostname:port/some/rest/resource/"))
.hostnameVerifier(new NoopHostnameVerifier()).sslContext(sslContext).build(AuthRestClient.class);
return client.getTheResource();
}
}
【讨论】: