【问题标题】:Java Quarkus/MicroProfile Restclient inject sslContextJava Quarkus/MicroProfile Restclient 注入 sslContext
【发布时间】:2021-05-07 17:48:27
【问题描述】:

如何通过在接口中使用@RegisterRestClient 来注入自定义sslContext

【问题讨论】:

    标签: java quarkus microprofile


    【解决方案1】:

    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();
        }
    }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-29
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多