diff --git a/spring-web/src/main/java/org/springframework/http/client/reactive/HttpComponentsClientHttpResponse.java b/spring-web/src/main/java/org/springframework/http/client/reactive/HttpComponentsClientHttpResponse.java index e79468b428e..54c5da2c052 100644 --- a/spring-web/src/main/java/org/springframework/http/client/reactive/HttpComponentsClientHttpResponse.java +++ b/spring-web/src/main/java/org/springframework/http/client/reactive/HttpComponentsClientHttpResponse.java @@ -70,8 +70,11 @@ class HttpComponentsClientHttpResponse extends AbstractClientHttpResponse { LinkedMultiValueMap result = new LinkedMultiValueMap<>(); CookieSpec cookieSpec = context.getCookieSpec(); - CookieOrigin cookieOrigin = context.getCookieOrigin(); + if (cookieSpec == null) { + return result; + } + CookieOrigin cookieOrigin = context.getCookieOrigin(); Iterator
itr = response.headerIterator(HttpHeaders.SET_COOKIE); while (itr.hasNext()) { Header header = itr.next(); diff --git a/spring-web/src/test/java/org/springframework/http/client/reactive/ClientHttpConnectorTests.java b/spring-web/src/test/java/org/springframework/http/client/reactive/ClientHttpConnectorTests.java index 84fd36860ef..dcd98a835ff 100644 --- a/spring-web/src/test/java/org/springframework/http/client/reactive/ClientHttpConnectorTests.java +++ b/spring-web/src/test/java/org/springframework/http/client/reactive/ClientHttpConnectorTests.java @@ -39,9 +39,11 @@ import okhttp3.mockwebserver.MockResponse; import okhttp3.mockwebserver.MockWebServer; import okhttp3.mockwebserver.RecordedRequest; import okio.Buffer; +import org.apache.hc.client5.http.impl.async.HttpAsyncClientBuilder; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Named; +import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; @@ -64,6 +66,7 @@ import static org.junit.jupiter.api.Named.named; * Tests for {@link ClientHttpConnector} implementations. * @author Arjen Poutsma * @author Brian Clozel + * @author Sebastien Deleuze */ class ClientHttpConnectorTests { @@ -198,6 +201,28 @@ class ClientHttpConnectorTests { .verifyComplete(); } + @Test + void disableCookieWithHttpComponents() { + ClientHttpConnector connector = new HttpComponentsClientHttpConnector( + HttpAsyncClientBuilder.create().disableCookieManagement().build() + ); + + prepareResponse(response -> { + response.setResponseCode(200); + response.addHeader("Set-Cookie", "id=test;"); + }); + Mono futureResponse = + connector.connect(HttpMethod.GET, this.server.url("/").uri(), ReactiveHttpOutputMessage::setComplete); + StepVerifier.create(futureResponse) + .assertNext(response -> { + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); + assertThat(response.getCookies()).isEmpty(); + } + ) + .verifyComplete(); + + } + private Buffer randomBody(int size) { Buffer responseBody = new Buffer(); Random rnd = new Random();