使用Java 7在Jersey上重置连接

使用Java 7在Jersey上重置连接,java,ssl,java-7,jersey-2.0,Java,Ssl,Java 7,Jersey 2.0,我正在尝试调用jersey 2.22.2的webTarget的https链接。 守则是: Client client = ClientBuilder.newBuilder().build(); WebTarget target = client.target(uri); MultivaluedMap<String, Object> headers = new MultivaluedHashMap<String, Object>(); headers.add("Conte

我正在尝试调用jersey 2.22.2的webTarget的https链接。 守则是:

Client client = ClientBuilder.newBuilder().build();
WebTarget target = client.target(uri);
MultivaluedMap<String, Object> headers = new MultivaluedHashMap<String, Object>();

headers.add("Content-Type", "application/json");
headers.add("id", id);
headers.add("key", key);

Response response = target.request().headers(headers).get(Response.class);
我发现应该配置ssl。我已经尝试了我所看到的一切,但没有任何效果。我在Java 7中使用的代码是:

Configuration config=ClientBuilder.newBuilder().getConfiguration();
Client Client=new JerseyWithSSL().initClient(config);
WebTarget=client.target(uri);
MultivaluedMap headers=新的MultivaluedHashMap();
添加(“内容类型”、“应用程序/json”);
标题。添加(“id”,id);
标题。添加(“键”,键);
Response-Response=target.request().headers(headers.get(Response.class));

我只是想知道出了什么问题。Java7不允许TLSv1.2。以下代码解决了我的问题:

import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;

import org.glassfish.jersey.client.ClientConfig;

public class ClientHelper {

public static Client configureClient() {
    TrustManager[] certs = new TrustManager[] { new X509TrustManager() {
        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }
    } };

    SSLContext ctx = null;
    try {
        ctx = SSLContext.getInstance("TLSv1.2");
        ctx.init(null, certs, new SecureRandom());
    } catch (java.security.GeneralSecurityException e) {

    }

    HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());

    ClientBuilder clientBuilder = ClientBuilder.newBuilder();
    try {
        clientBuilder.sslContext(ctx);
        clientBuilder.hostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        });
    } catch (Exception e) {
    }

    return clientBuilder.withConfig(new ClientConfig()).build();
}

}

非常感谢您发布此解决方案,它确实帮助meIts不调用“new X509TrustManager()中的代码”
Configuration config = ClientBuilder.newBuilder().getConfiguration();
Client client = new JerseyWithSSL().initClient(config);

WebTarget target = client.target(uri);
MultivaluedMap<String, Object> headers = new MultivaluedHashMap<String, Object>();

headers.add("Content-Type", "application/json");
headers.add("id", id);
headers.add("key", key);

Response response = target.request().headers(headers).get(Response.class);
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;

import org.glassfish.jersey.client.ClientConfig;

public class ClientHelper {

public static Client configureClient() {
    TrustManager[] certs = new TrustManager[] { new X509TrustManager() {
        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }
    } };

    SSLContext ctx = null;
    try {
        ctx = SSLContext.getInstance("TLSv1.2");
        ctx.init(null, certs, new SecureRandom());
    } catch (java.security.GeneralSecurityException e) {

    }

    HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());

    ClientBuilder clientBuilder = ClientBuilder.newBuilder();
    try {
        clientBuilder.sslContext(ctx);
        clientBuilder.hostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        });
    } catch (Exception e) {
    }

    return clientBuilder.withConfig(new ClientConfig()).build();
}