使用Java 7在Jersey上重置连接
我正在尝试调用jersey 2.22.2的webTarget的https链接。 守则是:使用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
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();
}