diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebConnection.java b/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebConnection.java index 4fd0ba5ee79..ce2fa2e99fc 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebConnection.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebConnection.java @@ -181,7 +181,7 @@ public final class MockMvcWebConnection implements WebConnection { private static Cookie createCookie(jakarta.servlet.http.Cookie cookie) { Date expires = null; if (cookie.getMaxAge() > -1) { - expires = new Date(System.currentTimeMillis() + cookie.getMaxAge() * 1000); + expires = new Date(System.currentTimeMillis() + cookie.getMaxAge() * 1000L); } return new Cookie(cookie.getDomain(), cookie.getName(), cookie.getValue(), cookie.getPath(), expires, cookie.getSecure(), cookie.isHttpOnly()); diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebClientBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebClientBuilderTests.java index 74af75998bf..3e38e5072b2 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebClientBuilderTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebClientBuilderTests.java @@ -109,6 +109,17 @@ class MockMvcWebClientBuilderTests { assertThat(getResponse(client, "http://localhost/").getContentAsString()).isEqualTo("NA"); } + @Test + void cookieWithLargeMaxAgeIsStored() throws Exception { + this.mockMvc = MockMvcBuilders.standaloneSetup(new CookieController()).build(); + WebClient client = MockMvcWebClientBuilder.mockMvcSetup(this.mockMvc).build(); + + assertThat(getResponse(client, "http://localhost/").getContentAsString()).isEqualTo("NA"); + assertThat(postResponse(client, "http://localhost/long-lived", "cookie=foo") + .getContentAsString()).isEqualTo("Set"); + assertThat(getResponse(client, "http://localhost/").getContentAsString()).isEqualTo("foo"); + } + private void assertMockMvcUsed(WebClient client, String url) throws Exception { assertThat(getResponse(client, url).getContentAsString()).isEqualTo("mvc"); } @@ -162,6 +173,15 @@ class MockMvcWebClientBuilderTests { return "Set"; } + @PostMapping(path = "/long-lived", produces = "text/plain") + String setLongLivedCookie(@RequestParam String cookie, HttpServletResponse response) { + jakarta.servlet.http.Cookie longLived = new jakarta.servlet.http.Cookie(COOKIE_NAME, cookie); + longLived.setMaxAge(Integer.MAX_VALUE); + longLived.setPath("/"); + response.addCookie(longLived); + return "Set"; + } + @DeleteMapping(path = "/", produces = "text/plain") String deleteCookie(HttpServletResponse response) { jakarta.servlet.http.Cookie cookie = new jakarta.servlet.http.Cookie(COOKIE_NAME, ""); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/FlashMap.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/FlashMap.java index 9abc282e459..fb50e8d6a6b 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/FlashMap.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/FlashMap.java @@ -112,7 +112,7 @@ public final class FlashMap extends HashMap implements Comparabl * @param timeToLive the number of seconds before expiration */ public void startExpirationPeriod(int timeToLive) { - this.expirationTime = System.currentTimeMillis() + timeToLive * 1000; + this.expirationTime = System.currentTimeMillis() + timeToLive * 1000L; } /** diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/FlashMapTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/FlashMapTests.java index dedbc294744..6e038dc09d9 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/FlashMapTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/FlashMapTests.java @@ -50,6 +50,15 @@ class FlashMapTests { assertThat(flashMap.isExpired()).isFalse(); } + @Test + void notExpiredWithLargeTimeToLive() { + FlashMap flashMap = new FlashMap(); + flashMap.startExpirationPeriod(Integer.MAX_VALUE); + + assertThat(flashMap.getExpirationTime()).isGreaterThan(System.currentTimeMillis()); + assertThat(flashMap.isExpired()).isFalse(); + } + @Test void compareTo() { FlashMap flashMap1 = new FlashMap();