From 9fb61c57ae6dc04cbcea4a0785da2c1b7a8b5a33 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Tue, 4 Apr 2023 16:32:30 +0200 Subject: [PATCH] Sync MockCookie implementations See gh-30263 --- .../web/testfixture/servlet/MockCookie.java | 33 +++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockCookie.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockCookie.java index 23a74b54940f..8183675a4b9b 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockCookie.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockCookie.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,6 +31,8 @@ * Extension of {@code Cookie} with extra attributes, as defined in * RFC 6265. * + *

As of Spring 6.0, this set of mocks is designed on a Servlet 6.0 baseline. + * * @author Vedran Pavic * @author Juergen Hoeller * @author Sam Brannen @@ -41,13 +43,12 @@ public class MockCookie extends Cookie { private static final long serialVersionUID = 4312531139502726325L; + private static final String SAME_SITE = "SameSite"; + private static final String EXPIRES = "Expires"; @Nullable private ZonedDateTime expires; - @Nullable - private String sameSite; - /** * Construct a new {@link MockCookie} with the supplied name and value. @@ -64,7 +65,7 @@ public MockCookie(String name, String value) { * @since 5.1.11 */ public void setExpires(@Nullable ZonedDateTime expires) { - this.expires = expires; + setAttribute(EXPIRES, (expires != null ? expires.format(DateTimeFormatter.RFC_1123_DATE_TIME) : null)); } /** @@ -85,7 +86,7 @@ public ZonedDateTime getExpires() { * @see RFC6265 bis */ public void setSameSite(@Nullable String sameSite) { - this.sameSite = sameSite; + setAttribute(SAME_SITE, sameSite); } /** @@ -94,10 +95,9 @@ public void setSameSite(@Nullable String sameSite) { */ @Nullable public String getSameSite() { - return this.sameSite; + return getAttribute(SAME_SITE); } - /** * Factory method that parses the value of the supplied "Set-Cookie" header. * @param setCookieHeader the "Set-Cookie" value; never {@code null} or empty @@ -122,7 +122,7 @@ public static MockCookie parse(String setCookieHeader) { else if (StringUtils.startsWithIgnoreCase(attribute, "Max-Age")) { cookie.setMaxAge(Integer.parseInt(extractAttributeValue(attribute, setCookieHeader))); } - else if (StringUtils.startsWithIgnoreCase(attribute, "Expires")) { + else if (StringUtils.startsWithIgnoreCase(attribute, EXPIRES)) { try { cookie.setExpires(ZonedDateTime.parse(extractAttributeValue(attribute, setCookieHeader), DateTimeFormatter.RFC_1123_DATE_TIME)); @@ -140,7 +140,7 @@ else if (StringUtils.startsWithIgnoreCase(attribute, "Secure")) { else if (StringUtils.startsWithIgnoreCase(attribute, "HttpOnly")) { cookie.setHttpOnly(true); } - else if (StringUtils.startsWithIgnoreCase(attribute, "SameSite")) { + else if (StringUtils.startsWithIgnoreCase(attribute, SAME_SITE)) { cookie.setSameSite(extractAttributeValue(attribute, setCookieHeader)); } else if (StringUtils.startsWithIgnoreCase(attribute, "Comment")) { @@ -157,6 +157,14 @@ private static String extractAttributeValue(String attribute, String header) { return nameAndValue[1]; } + @Override + public void setAttribute(String name, @Nullable String value) { + if (EXPIRES.equalsIgnoreCase(name)) { + this.expires = (value != null ? ZonedDateTime.parse(value, DateTimeFormatter.RFC_1123_DATE_TIME) : null); + } + super.setAttribute(name, value); + } + @Override public String toString() { return new ToStringCreator(this) @@ -168,10 +176,9 @@ public String toString() { .append("Comment", getComment()) .append("Secure", getSecure()) .append("HttpOnly", isHttpOnly()) - .append("SameSite", this.sameSite) + .append(SAME_SITE, getSameSite()) .append("Max-Age", getMaxAge()) - .append("Expires", (this.expires != null ? - DateTimeFormatter.RFC_1123_DATE_TIME.format(this.expires) : null)) + .append(EXPIRES, getAttribute(EXPIRES)) .toString(); }