Fix Partitioned session cooke attribute configuration with Tomcat

Fixes gh-50201
This commit is contained in:
Andy Wilkinson
2026-04-24 15:06:38 +01:00
parent 47c591fe6f
commit b02f7ddea3
2 changed files with 17 additions and 5 deletions
@@ -97,9 +97,7 @@ public final class ServletContextInitializers implements Iterable<ServletContext
map.from(cookie::getHttpOnly).to(config::setHttpOnly);
map.from(cookie::getSecure).to(config::setSecure);
map.from(cookie::getMaxAge).asInt(Duration::getSeconds).to(config::setMaxAge);
map.from(cookie::getPartitioned)
.as(Object::toString)
.to((partitioned) -> config.setAttribute("Partitioned", partitioned));
map.from(cookie::getPartitioned).to((partitioned) -> config.setAttribute("Partitioned", ""));
}
@Contract("!null -> !null")
@@ -881,10 +881,24 @@ public abstract class AbstractServletWebServerFactoryTests {
assertThat(sessionCookieConfig.getPath()).isEqualTo("/testpath");
assertThat(sessionCookieConfig.isHttpOnly()).isTrue();
assertThat(sessionCookieConfig.isSecure()).isTrue();
assertThat(sessionCookieConfig.getAttribute("Partitioned")).isEqualTo("true");
assertThat(sessionCookieConfig.getAttribute("Partitioned")).isEqualTo("");
assertThat(sessionCookieConfig.getMaxAge()).isEqualTo(60);
}
@Test
void sessionCookiePartitionedAttribute() throws Exception {
ConfigurableServletWebServerFactory factory = getFactory();
factory.getSettings().getSession().getCookie().setPartitioned(true);
factory.addInitializers(new ServletRegistrationBean<>(new CookieServlet(false), "/"));
this.webServer = factory.getWebServer();
this.webServer.start();
ClientHttpResponse clientResponse = getClientResponse(getLocalUrl("/"));
List<String> setCookieHeaders = clientResponse.getHeaders().get("Set-Cookie");
assertThat(setCookieHeaders).satisfiesExactlyInAnyOrder(
(header) -> assertThat(header).startsWith("JSESSIONID=").contains("; Partitioned"),
(header) -> assertThat(header).isEqualTo("test=test"));
}
@ParameterizedTest
@EnumSource(mode = EnumSource.Mode.EXCLUDE, names = "OMITTED")
void sessionCookieSameSiteAttributeCanBeConfiguredAndOnlyAffectsSessionCookies(SameSite sameSite) throws Exception {
@@ -1212,7 +1226,7 @@ public abstract class AbstractServletWebServerFactoryTests {
assertThat(sessionCookieConfig.isHttpOnly()).isTrue();
assertThat(sessionCookieConfig.isSecure()).isTrue();
assertThat(sessionCookieConfig.getMaxAge()).isEqualTo(60);
assertThat(sessionCookieConfig.getAttribute("Partitioned")).isEqualTo("false");
assertThat(sessionCookieConfig.getAttribute("Partitioned")).isEqualTo("");
}
@Test