首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Quarkus/MicroProfile Restclient注入sslContext

Java Quarkus/MicroProfile Restclient注入sslContext
EN

Stack Overflow用户
提问于 2021-02-03 21:25:37
回答 1查看 118关注 0票数 0

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

EN

回答 1

Stack Overflow用户

发布于 2021-07-28 04:38:10

Quarkus或Microprofile也不允许您以编程方式构建rest客户端(这毕竟是为您提供自动实现的接口的目的)。不过,您也可以自己实现rest-client接口并设置javax.net.ssl.SSLContext。

下面的示例旨在提供一个信任所有主机的SSLContext:

代码语言:javascript
复制
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();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66028490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档