Skip to content

Commit f9144ea

Browse files
committed
SPR-8367 - 3.1.0.M2 update of the RestTemplate for Apache HTTP Components will default to sending 2 requests on authentication and doesn't support HttpContext parameters without significant extention/rewrite
1 parent 29e9690 commit f9144ea

File tree

2 files changed

+27
-12
lines changed

2 files changed

+27
-12
lines changed

org.springframework.web/src/main/java/org/springframework/http/client/HttpComponentsClientHttpRequest.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,17 @@
2121
import java.util.List;
2222
import java.util.Map;
2323

24+
import org.springframework.http.HttpHeaders;
25+
import org.springframework.http.HttpMethod;
26+
2427
import org.apache.http.HttpEntity;
2528
import org.apache.http.HttpEntityEnclosingRequest;
2629
import org.apache.http.HttpResponse;
2730
import org.apache.http.client.HttpClient;
2831
import org.apache.http.client.methods.HttpUriRequest;
2932
import org.apache.http.entity.ByteArrayEntity;
3033
import org.apache.http.protocol.HTTP;
31-
32-
import org.springframework.http.HttpHeaders;
33-
import org.springframework.http.HttpMethod;
34+
import org.apache.http.protocol.HttpContext;
3435

3536
/**
3637
* {@link org.springframework.http.client.ClientHttpRequest} implementation that uses
@@ -49,10 +50,13 @@ final class HttpComponentsClientHttpRequest extends AbstractBufferingClientHttpR
4950

5051
private final HttpUriRequest httpRequest;
5152

53+
private final HttpContext httpContext;
54+
5255

53-
public HttpComponentsClientHttpRequest(HttpClient httpClient, HttpUriRequest httpRequest) {
56+
public HttpComponentsClientHttpRequest(HttpClient httpClient, HttpUriRequest httpRequest, HttpContext httpContext) {
5457
this.httpClient = httpClient;
5558
this.httpRequest = httpRequest;
59+
this.httpContext = httpContext;
5660
}
5761

5862

@@ -81,7 +85,7 @@ protected ClientHttpResponse executeInternal(HttpHeaders headers, byte[] buffere
8185
HttpEntity requestEntity = new ByteArrayEntity(bufferedOutput);
8286
entityEnclosingRequest.setEntity(requestEntity);
8387
}
84-
HttpResponse httpResponse = this.httpClient.execute(this.httpRequest);
88+
HttpResponse httpResponse = this.httpClient.execute(this.httpRequest, this.httpContext);
8589
return new HttpComponentsClientHttpResponse(httpResponse);
8690
}
8791

org.springframework.web/src/main/java/org/springframework/http/client/HttpComponentsClientHttpRequestFactory.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919
import java.io.IOException;
2020
import java.net.URI;
2121

22+
import org.springframework.beans.factory.DisposableBean;
23+
import org.springframework.http.HttpMethod;
24+
import org.springframework.util.Assert;
25+
2226
import org.apache.http.client.HttpClient;
2327
import org.apache.http.client.methods.HttpDelete;
2428
import org.apache.http.client.methods.HttpGet;
@@ -35,10 +39,7 @@
3539
import org.apache.http.impl.client.DefaultHttpClient;
3640
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
3741
import org.apache.http.params.CoreConnectionPNames;
38-
39-
import org.springframework.beans.factory.DisposableBean;
40-
import org.springframework.http.HttpMethod;
41-
import org.springframework.util.Assert;
42+
import org.apache.http.protocol.HttpContext;
4243

4344
/**
4445
* {@link org.springframework.http.client.ClientHttpRequestFactory} implementation that uses
@@ -126,11 +127,10 @@ public void setReadTimeout(int timeout) {
126127
getHttpClient().getParams().setIntParameter(CoreConnectionPNames.SO_TIMEOUT, timeout);
127128
}
128129

129-
130-
public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException {
130+
public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException {
131131
HttpUriRequest httpRequest = createHttpUriRequest(httpMethod, uri);
132132
postProcessHttpRequest(httpRequest);
133-
return new HttpComponentsClientHttpRequest(getHttpClient(), httpRequest);
133+
return new HttpComponentsClientHttpRequest(getHttpClient(), httpRequest, createHttpContext(httpMethod, uri));
134134
}
135135

136136
/**
@@ -169,6 +169,17 @@ protected HttpUriRequest createHttpUriRequest(HttpMethod httpMethod, URI uri) {
169169
protected void postProcessHttpRequest(HttpUriRequest request) {
170170
}
171171

172+
/**
173+
* Template methods that creates a {@link HttpContext} for the given HTTP method and URI.
174+
* <p>The default implementation returns {@code null}.
175+
* @param httpMethod the HTTP method
176+
* @param uri the URI
177+
* @return the http context
178+
*/
179+
protected HttpContext createHttpContext(HttpMethod httpMethod, URI uri) {
180+
return null;
181+
}
182+
172183
/**
173184
* Shutdown hook that closes the underlying
174185
* {@link org.apache.http.conn.ClientConnectionManager ClientConnectionManager}'s

0 commit comments

Comments
 (0)