From 4b3e192ca16484bc3c5d1f81e11f1418025826aa Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Tue, 19 Nov 2024 18:07:22 +0100 Subject: [PATCH] Upgrade to Tomcat 11.0 This commit upgrades the baseline to Tomcat 11.0 and adapts to the following behavior changes in Tomcat: * the MimeHeaders#clear method has been removed * expired cookies do not set "Max-Age=0" anymore * responses to HEAD requests do not write the "Content-Length" header anymore. Closes gh-33916 --- framework-platform/framework-platform.gradle | 8 ++++---- .../http/server/reactive/TomcatHeadersAdapter.java | 5 +++-- .../web/server/session/WebSessionIntegrationTests.java | 4 ++-- .../method/annotation/RequestMappingIntegrationTests.java | 1 - 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/framework-platform/framework-platform.gradle b/framework-platform/framework-platform.gradle index 0e155f0a118..998c4918557 100644 --- a/framework-platform/framework-platform.gradle +++ b/framework-platform/framework-platform.gradle @@ -103,10 +103,10 @@ dependencies { api("org.apache.httpcomponents.client5:httpclient5:5.4.1") api("org.apache.httpcomponents.core5:httpcore5-reactive:5.3.1") api("org.apache.poi:poi-ooxml:5.2.5") - api("org.apache.tomcat.embed:tomcat-embed-core:10.1.28") - api("org.apache.tomcat.embed:tomcat-embed-websocket:10.1.28") - api("org.apache.tomcat:tomcat-util:10.1.28") - api("org.apache.tomcat:tomcat-websocket:10.1.28") + api("org.apache.tomcat.embed:tomcat-embed-core:11.0.1") + api("org.apache.tomcat.embed:tomcat-embed-websocket:11.0.1") + api("org.apache.tomcat:tomcat-util:11.0.1") + api("org.apache.tomcat:tomcat-websocket:11.0.1") api("org.aspectj:aspectjrt:1.9.22.1") api("org.aspectj:aspectjtools:1.9.22.1") api("org.aspectj:aspectjweaver:1.9.22.1") diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHeadersAdapter.java b/spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHeadersAdapter.java index ac49e0357f3..c921a747500 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHeadersAdapter.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHeadersAdapter.java @@ -161,10 +161,11 @@ class TomcatHeadersAdapter implements MultiValueMap { map.forEach(this::put); } - @SuppressWarnings("deprecation") // on Tomcat 10.1.16+ @Override public void clear() { - this.headers.clear(); + for (int i = 0 ; i < this.headers.size(); i++) { + this.headers.removeHeader(i); + } } @Override diff --git a/spring-web/src/test/java/org/springframework/web/server/session/WebSessionIntegrationTests.java b/spring-web/src/test/java/org/springframework/web/server/session/WebSessionIntegrationTests.java index 1cae7c7c96d..0b3643eafb5 100644 --- a/spring-web/src/test/java/org/springframework/web/server/session/WebSessionIntegrationTests.java +++ b/spring-web/src/test/java/org/springframework/web/server/session/WebSessionIntegrationTests.java @@ -141,7 +141,7 @@ class WebSessionIntegrationTests extends AbstractHttpHandlerIntegrationTests { assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); String value = response.getHeaders().getFirst("Set-Cookie"); assertThat(value).isNotNull(); - assertThat(value).as("Actual value: " + value).contains("Max-Age=0"); + assertThat(value).as("Actual value: " + value).containsAnyOf("Expires=Thu, 01 Jan 1970", "Max-Age=0"); } @ParameterizedHttpServerTest @@ -189,7 +189,7 @@ class WebSessionIntegrationTests extends AbstractHttpHandlerIntegrationTests { assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); String value = response.getHeaders().getFirst("Set-Cookie"); assertThat(value).isNotNull(); - assertThat(value).as("Actual value: " + value).contains("Max-Age=0"); + assertThat(value).as("Actual value: " + value).containsAnyOf("Expires=Thu, 01 Jan 1970", "Max-Age=0"); } private String extractSessionId(HttpHeaders headers) { diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestMappingIntegrationTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestMappingIntegrationTests.java index ca52e7a255d..cfd0b5f8f36 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestMappingIntegrationTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestMappingIntegrationTests.java @@ -93,7 +93,6 @@ class RequestMappingIntegrationTests extends AbstractRequestMappingIntegrationTe HttpHeaders headers = getRestTemplate().headForHeaders(url); String contentType = headers.getFirst("Content-Type"); assertThat(contentType).isNotNull(); - assertThat(headers.getContentLength()).isEqualTo(3); } @ParameterizedHttpServerTest