Skip to content

Commit 84a5786

Browse files
committed
Merge branch '6.2.x'
2 parents 7bc712e + 1633ad2 commit 84a5786

File tree

4 files changed

+32
-3
lines changed

4 files changed

+32
-3
lines changed

Diff for: buildSrc/src/main/java/org/springframework/build/CheckstyleConventions.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ private static void configureNoHttpPlugin(Project project) {
6363
project.getPlugins().apply(NoHttpPlugin.class);
6464
NoHttpExtension noHttp = project.getExtensions().getByType(NoHttpExtension.class);
6565
noHttp.setAllowlistFile(project.file("src/nohttp/allowlist.lines"));
66-
noHttp.getSource().exclude("**/test-output/**", "**/.settings/**",
67-
"**/.classpath", "**/.project", "**/.gradle/**", "**/node_modules/**", "**/spring-jcl/**", "buildSrc/**");
66+
noHttp.getSource().exclude("**/test-output/**", "**/.settings/**", "**/.classpath",
67+
"**/.project", "**/.gradle/**", "**/node_modules/**", "**/spring-jcl/**", "buildSrc/build/**");
6868
List<String> buildFolders = List.of("bin", "build", "out");
6969
project.allprojects(subproject -> {
7070
Path rootPath = project.getRootDir().toPath();

Diff for: spring-web/src/main/java/org/springframework/http/client/reactive/HttpComponentsClientHttpResponse.java

+1
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ private static MultiValueMap<String, ResponseCookie> adaptCookies(
9090
.maxAge(getMaxAgeSeconds(cookie))
9191
.secure(cookie.isSecure())
9292
.httpOnly(cookie.containsAttribute("httponly"))
93+
.partitioned(cookie.containsAttribute("partitioned"))
9394
.sameSite(cookie.getAttribute("samesite"))
9495
.build());
9596
}

Diff for: spring-web/src/main/java/org/springframework/http/client/reactive/ReactorClientHttpResponse.java

+8
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ public MultiValueMap<String, ResponseCookie> getCookies() {
134134
.secure(cookie.isSecure())
135135
.httpOnly(cookie.isHttpOnly())
136136
.sameSite(getSameSite(cookie))
137+
.partitioned(getPartitioned(cookie))
137138
.build()));
138139
return CollectionUtils.unmodifiableMultiValueMap(result);
139140
}
@@ -145,6 +146,13 @@ public MultiValueMap<String, ResponseCookie> getCookies() {
145146
return null;
146147
}
147148

149+
private static boolean getPartitioned(Cookie cookie) {
150+
if (cookie instanceof DefaultCookie defaultCookie) {
151+
return defaultCookie.isPartitioned();
152+
}
153+
return false;
154+
}
155+
148156
/**
149157
* Called by {@link ReactorClientHttpConnector} when a cancellation is detected
150158
* but the content has not been subscribed to. If the subscription never

Diff for: spring-web/src/test/java/org/springframework/http/client/reactive/ClientHttpConnectorTests.java

+21-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2024 the original author or authors.
2+
* Copyright 2002-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -41,6 +41,7 @@
4141
import okio.Buffer;
4242
import org.apache.hc.client5.http.impl.async.HttpAsyncClientBuilder;
4343
import org.junit.jupiter.api.AfterEach;
44+
import org.junit.jupiter.api.Assumptions;
4445
import org.junit.jupiter.api.BeforeEach;
4546
import org.junit.jupiter.api.Named;
4647
import org.junit.jupiter.api.Test;
@@ -201,6 +202,25 @@ void cookieExpireValueSetAsMaxAge(ClientHttpConnector connector) {
201202
.verifyComplete();
202203
}
203204

205+
@ParameterizedConnectorTest
206+
void partitionedCookieSupport(ClientHttpConnector connector) {
207+
Assumptions.assumeFalse(connector instanceof JettyClientHttpConnector, "Jetty client does not support partitioned cookies");
208+
Assumptions.assumeFalse(connector instanceof JdkClientHttpConnector, "JDK client does not support partitioned cookies");
209+
prepareResponse(response -> {
210+
response.setResponseCode(200);
211+
response.addHeader("Set-Cookie", "id=test; Partitioned;");
212+
});
213+
Mono<ClientHttpResponse> futureResponse =
214+
connector.connect(HttpMethod.GET, this.server.url("/").uri(), ReactiveHttpOutputMessage::setComplete);
215+
StepVerifier.create(futureResponse)
216+
.assertNext(response -> {
217+
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
218+
assertThat(response.getCookies().getFirst("id").isPartitioned()).isTrue();
219+
}
220+
)
221+
.verifyComplete();
222+
}
223+
204224
@Test
205225
void disableCookieWithHttpComponents() {
206226
ClientHttpConnector connector = new HttpComponentsClientHttpConnector(

0 commit comments

Comments
 (0)