105 lines
5.1 KiB
Java
105 lines
5.1 KiB
Java
package com.baeldung.client;
|
|
|
|
import static org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
|
|
import static org.hamcrest.Matchers.equalTo;
|
|
import static org.junit.Assert.assertThat;
|
|
|
|
import java.io.IOException;
|
|
import java.security.GeneralSecurityException;
|
|
import java.security.cert.X509Certificate;
|
|
|
|
import javax.net.ssl.SSLContext;
|
|
|
|
import org.apache.http.HttpResponse;
|
|
import org.apache.http.client.ClientProtocolException;
|
|
import org.apache.http.client.methods.HttpGet;
|
|
import org.apache.http.config.Registry;
|
|
import org.apache.http.config.RegistryBuilder;
|
|
import org.apache.http.conn.scheme.Scheme;
|
|
import org.apache.http.conn.socket.ConnectionSocketFactory;
|
|
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
|
|
import org.apache.http.conn.ssl.NoopHostnameVerifier;
|
|
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
|
import org.apache.http.conn.ssl.SSLSocketFactory;
|
|
import org.apache.http.conn.ssl.TrustStrategy;
|
|
import org.apache.http.impl.client.CloseableHttpClient;
|
|
import org.apache.http.impl.client.HttpClients;
|
|
import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
|
|
import org.apache.http.ssl.SSLContexts;
|
|
import org.junit.Ignore;
|
|
import org.junit.Test;
|
|
import org.springframework.http.HttpMethod;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
|
import org.springframework.web.client.RestTemplate;
|
|
|
|
/**
|
|
* This test requires a localhost server over HTTPS <br>
|
|
* It should only be manually run, not part of the automated build
|
|
* */
|
|
public class RestClientLiveManualTest {
|
|
|
|
final String urlOverHttps = "http://localhost:8082/httpclient-simple/api/bars/1";
|
|
|
|
// tests
|
|
|
|
// old httpClient will throw UnsupportedOperationException
|
|
@Ignore
|
|
@Test
|
|
public final void givenAcceptingAllCertificates_whenHttpsUrlIsConsumed_thenOk_1() throws GeneralSecurityException {
|
|
final HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
|
|
final CloseableHttpClient httpClient = (CloseableHttpClient) requestFactory.getHttpClient();
|
|
|
|
final TrustStrategy acceptingTrustStrategy = (cert, authType) -> true;
|
|
|
|
final SSLSocketFactory sf = new SSLSocketFactory(acceptingTrustStrategy, ALLOW_ALL_HOSTNAME_VERIFIER);
|
|
httpClient.getConnectionManager().getSchemeRegistry().register(new Scheme("https", 8443, sf));
|
|
|
|
final ResponseEntity<String> response = new RestTemplate(requestFactory).exchange(urlOverHttps, HttpMethod.GET, null, String.class);
|
|
assertThat(response.getStatusCode().value(), equalTo(200));
|
|
}
|
|
|
|
// new httpClient : 4.4 and above
|
|
@Test
|
|
public final void givenAcceptingAllCertificates_whenHttpsUrlIsConsumed_thenOk_2() throws GeneralSecurityException {
|
|
|
|
final TrustStrategy acceptingTrustStrategy = (cert, authType) -> true;
|
|
final SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build();
|
|
final SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
|
|
final Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory> create()
|
|
.register("https", sslsf)
|
|
.register("http", new PlainConnectionSocketFactory())
|
|
.build();
|
|
|
|
final BasicHttpClientConnectionManager connectionManager = new BasicHttpClientConnectionManager(socketFactoryRegistry);
|
|
final CloseableHttpClient httpClient = HttpClients.custom()
|
|
.setSSLSocketFactory(sslsf)
|
|
.setConnectionManager(connectionManager)
|
|
.build();
|
|
|
|
final HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
|
|
final ResponseEntity<String> response = new RestTemplate(requestFactory).exchange(urlOverHttps, HttpMethod.GET, null, String.class);
|
|
assertThat(response.getStatusCode().value(), equalTo(200));
|
|
}
|
|
|
|
@Test
|
|
public final void givenAcceptingAllCertificatesUsing4_4_whenHttpsUrlIsConsumed_thenCorrect() throws ClientProtocolException, IOException {
|
|
final CloseableHttpClient httpClient = HttpClients.custom().setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
|
|
|
|
final HttpGet getMethod = new HttpGet(urlOverHttps);
|
|
final HttpResponse response = httpClient.execute(getMethod);
|
|
assertThat(response.getStatusLine().getStatusCode(), equalTo(200));
|
|
}
|
|
|
|
@Test
|
|
public final void givenAcceptingAllCertificatesUsing4_4_whenHttpsUrlIsConsumedUsingRestTemplate_thenCorrect() throws ClientProtocolException, IOException {
|
|
final CloseableHttpClient httpClient = HttpClients.custom().setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
|
|
final HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
|
|
requestFactory.setHttpClient(httpClient);
|
|
|
|
final ResponseEntity<String> response = new RestTemplate(requestFactory).exchange(urlOverHttps, HttpMethod.GET, null, String.class);
|
|
assertThat(response.getStatusCode().value(), equalTo(200));
|
|
}
|
|
|
|
}
|