Upgrade to HttpClient5 5.3.1

Closes gh-39703
This commit is contained in:
Andy Wilkinson 2024-02-22 07:58:49 +00:00
parent a52cc64701
commit 102215ee96
4 changed files with 28 additions and 13 deletions

View File

@ -442,17 +442,12 @@ bom {
] ]
} }
} }
library("HttpClient5", "5.2.3") { library("HttpClient5", "5.3.1") {
prohibit {
versionRange "[5.3]"
because "it can NPE when discarding a connection (https://issues.apache.org/jira/browse/HTTPCLIENT-2313)"
}
group("org.apache.httpcomponents.client5") { group("org.apache.httpcomponents.client5") {
modules = [ modules = [
"httpclient5", "httpclient5",
"httpclient5-cache", "httpclient5-cache",
"httpclient5-fluent", "httpclient5-fluent"
"httpclient5-win",
] ]
} }
} }

View File

@ -21,6 +21,7 @@ import java.net.URI;
import java.security.KeyManagementException; import java.security.KeyManagementException;
import java.security.KeyStoreException; import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.time.Duration; import java.time.Duration;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
@ -40,11 +41,11 @@ import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuil
import org.apache.hc.client5.http.protocol.HttpClientContext; import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory; import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactoryBuilder; import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactoryBuilder;
import org.apache.hc.client5.http.ssl.TrustSelfSignedStrategy;
import org.apache.hc.core5.http.io.SocketConfig; import org.apache.hc.core5.http.io.SocketConfig;
import org.apache.hc.core5.http.protocol.HttpContext; import org.apache.hc.core5.http.protocol.HttpContext;
import org.apache.hc.core5.http.ssl.TLS; import org.apache.hc.core5.http.ssl.TLS;
import org.apache.hc.core5.ssl.SSLContextBuilder; import org.apache.hc.core5.ssl.SSLContextBuilder;
import org.apache.hc.core5.ssl.TrustStrategy;
import org.springframework.boot.web.client.ClientHttpRequestFactorySettings; import org.springframework.boot.web.client.ClientHttpRequestFactorySettings;
import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.boot.web.client.RestTemplateBuilder;
@ -993,7 +994,7 @@ public class TestRestTemplate {
ENABLE_REDIRECTS, ENABLE_REDIRECTS,
/** /**
* Use a {@link SSLConnectionSocketFactory} with {@link TrustSelfSignedStrategy}. * Use a {@link SSLConnectionSocketFactory} that trusts self-signed certificates.
*/ */
SSL SSL
@ -1085,4 +1086,13 @@ public class TestRestTemplate {
} }
private static final class TrustSelfSignedStrategy implements TrustStrategy {
@Override
public boolean isTrusted(X509Certificate[] chain, String authType) {
return chain.length == 1;
}
}
} }

View File

@ -64,7 +64,6 @@ import org.apache.hc.client5.http.HttpHostConnectException;
import org.apache.hc.client5.http.classic.HttpClient; import org.apache.hc.client5.http.classic.HttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients; import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory; import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
import org.apache.hc.client5.http.ssl.TrustSelfSignedStrategy;
import org.apache.hc.core5.http.HttpResponse; import org.apache.hc.core5.http.HttpResponse;
import org.apache.hc.core5.http.NoHttpResponseException; import org.apache.hc.core5.http.NoHttpResponseException;
import org.apache.hc.core5.ssl.SSLContextBuilder; import org.apache.hc.core5.ssl.SSLContextBuilder;

View File

@ -87,7 +87,6 @@ import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder; import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
import org.apache.hc.client5.http.protocol.HttpClientContext; import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory; import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
import org.apache.hc.client5.http.ssl.TrustSelfSignedStrategy;
import org.apache.hc.core5.http.HttpResponse; import org.apache.hc.core5.http.HttpResponse;
import org.apache.hc.core5.http.io.HttpClientResponseHandler; import org.apache.hc.core5.http.io.HttpClientResponseHandler;
import org.apache.hc.core5.http.protocol.HttpContext; import org.apache.hc.core5.http.protocol.HttpContext;
@ -1404,7 +1403,7 @@ public abstract class AbstractServletWebServerFactoryTests {
compression.setExcludedUserAgents(excludedUserAgents); compression.setExcludedUserAgents(excludedUserAgents);
} }
factory.setCompression(compression); factory.setCompression(compression);
factory.addInitializers(new ServletRegistrationBean<HttpServlet>(new HttpServlet() { factory.addInitializers(new ServletRegistrationBean<>(new HttpServlet() {
@Override @Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException { protected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException {
@ -1631,7 +1630,7 @@ public abstract class AbstractServletWebServerFactoryTests {
} }
@Override @Override
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { public boolean isTrusted(X509Certificate[] chain, String authType) {
String hexSerialNumber = chain[0].getSerialNumber().toString(16); String hexSerialNumber = chain[0].getSerialNumber().toString(16);
boolean isMatch = hexSerialNumber.equalsIgnoreCase(this.serialNumber); boolean isMatch = hexSerialNumber.equalsIgnoreCase(this.serialNumber);
return super.isTrusted(chain, authType) && isMatch; return super.isTrusted(chain, authType) && isMatch;
@ -1775,4 +1774,16 @@ public abstract class AbstractServletWebServerFactoryTests {
} }
protected static class TrustSelfSignedStrategy implements TrustStrategy {
public TrustSelfSignedStrategy() {
}
@Override
public boolean isTrusted(X509Certificate[] chain, String authType) {
return chain.length == 1;
}
}
} }