diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java b/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java index 197004da61..522a60038c 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2019 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. @@ -20,12 +20,14 @@ import javax.servlet.http.Cookie; import org.springframework.lang.Nullable; import org.springframework.util.Assert; +import org.springframework.util.StringUtils; /** * Extension of {@code Cookie} with extra attributes, as defined in * RFC 6265. * * @author Vedran Pavic + * @author Juergen Hoeller * @since 5.1 */ public class MockCookie extends Cookie { @@ -39,7 +41,7 @@ public class MockCookie extends Cookie { /** * Constructor with the cookie name and value. - * @param name the name + * @param name the name * @param value the value * @see Cookie#Cookie(String, String) */ @@ -86,22 +88,22 @@ public class MockCookie extends Cookie { MockCookie cookie = new MockCookie(name, value); for (String attribute : attributes) { - if (attribute.startsWith("Domain")) { + if (StringUtils.startsWithIgnoreCase(attribute, "Domain")) { cookie.setDomain(extractAttributeValue(attribute, setCookieHeader)); } - else if (attribute.startsWith("Max-Age")) { + else if (StringUtils.startsWithIgnoreCase(attribute, "Max-Age")) { cookie.setMaxAge(Integer.parseInt(extractAttributeValue(attribute, setCookieHeader))); } - else if (attribute.startsWith("Path")) { + else if (StringUtils.startsWithIgnoreCase(attribute, "Path")) { cookie.setPath(extractAttributeValue(attribute, setCookieHeader)); } - else if (attribute.startsWith("Secure")) { + else if (StringUtils.startsWithIgnoreCase(attribute, "Secure")) { cookie.setSecure(true); } - else if (attribute.startsWith("HttpOnly")) { + else if (StringUtils.startsWithIgnoreCase(attribute, "HttpOnly")) { cookie.setHttpOnly(true); } - else if (attribute.startsWith("SameSite")) { + else if (StringUtils.startsWithIgnoreCase(attribute, "SameSite")) { cookie.setSameSite(extractAttributeValue(attribute, setCookieHeader)); } } diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockCookieTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockCookieTests.java index f5ca99ab44..3180369f0a 100644 --- a/spring-test/src/test/java/org/springframework/mock/web/MockCookieTests.java +++ b/spring-test/src/test/java/org/springframework/mock/web/MockCookieTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2019 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. @@ -34,6 +34,7 @@ public class MockCookieTests { @Rule public final ExpectedException exception = ExpectedException.none(); + @Test public void constructCookie() { MockCookie cookie = new MockCookie("SESSION", "123"); @@ -57,9 +58,7 @@ public class MockCookieTests { @Test public void parseHeaderWithoutAttributes() { - MockCookie cookie; - - cookie = MockCookie.parse("SESSION=123"); + MockCookie cookie = MockCookie.parse("SESSION=123"); assertCookie(cookie, "SESSION", "123"); cookie = MockCookie.parse("SESSION=123;"); @@ -80,6 +79,11 @@ public class MockCookieTests { assertEquals("Lax", cookie.getSameSite()); } + private void assertCookie(MockCookie cookie, String name, String value) { + assertEquals(name, cookie.getName()); + assertEquals(value, cookie.getValue()); + } + @Test public void parseNullHeader() { exception.expect(IllegalArgumentException.class); @@ -103,9 +107,18 @@ public class MockCookieTests { MockCookie.parse(header); } - private void assertCookie(MockCookie cookie, String name, String value) { - assertEquals(name, cookie.getName()); - assertEquals(value, cookie.getValue()); + @Test + public void parseHeaderWithAttributesCaseSensitivity() { + MockCookie cookie = MockCookie.parse( + "SESSION=123; domain=example.com; max-age=60; path=/; secure; httponly; samesite=Lax"); + + assertCookie(cookie, "SESSION", "123"); + assertEquals("example.com", cookie.getDomain()); + assertEquals(60, cookie.getMaxAge()); + assertEquals("/", cookie.getPath()); + assertTrue(cookie.getSecure()); + assertTrue(cookie.isHttpOnly()); + assertEquals("Lax", cookie.getSameSite()); } } diff --git a/spring-web/src/test/java/org/springframework/mock/web/test/MockCookie.java b/spring-web/src/test/java/org/springframework/mock/web/test/MockCookie.java index 3bf3c062a1..b7ac261942 100644 --- a/spring-web/src/test/java/org/springframework/mock/web/test/MockCookie.java +++ b/spring-web/src/test/java/org/springframework/mock/web/test/MockCookie.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2019 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. @@ -20,12 +20,14 @@ import javax.servlet.http.Cookie; import org.springframework.lang.Nullable; import org.springframework.util.Assert; +import org.springframework.util.StringUtils; /** * Extension of {@code Cookie} with extra attributes, as defined in * RFC 6265. * * @author Vedran Pavic + * @author Juergen Hoeller * @since 5.1 */ public class MockCookie extends Cookie { @@ -39,7 +41,7 @@ public class MockCookie extends Cookie { /** * Constructor with the cookie name and value. - * @param name the name + * @param name the name * @param value the value * @see Cookie#Cookie(String, String) */ @@ -86,22 +88,22 @@ public class MockCookie extends Cookie { MockCookie cookie = new MockCookie(name, value); for (String attribute : attributes) { - if (attribute.startsWith("Domain")) { + if (StringUtils.startsWithIgnoreCase(attribute, "Domain")) { cookie.setDomain(extractAttributeValue(attribute, setCookieHeader)); } - else if (attribute.startsWith("Max-Age")) { + else if (StringUtils.startsWithIgnoreCase(attribute, "Max-Age")) { cookie.setMaxAge(Integer.parseInt(extractAttributeValue(attribute, setCookieHeader))); } - else if (attribute.startsWith("Path")) { + else if (StringUtils.startsWithIgnoreCase(attribute, "Path")) { cookie.setPath(extractAttributeValue(attribute, setCookieHeader)); } - else if (attribute.startsWith("Secure")) { + else if (StringUtils.startsWithIgnoreCase(attribute, "Secure")) { cookie.setSecure(true); } - else if (attribute.startsWith("HttpOnly")) { + else if (StringUtils.startsWithIgnoreCase(attribute, "HttpOnly")) { cookie.setHttpOnly(true); } - else if (attribute.startsWith("SameSite")) { + else if (StringUtils.startsWithIgnoreCase(attribute, "SameSite")) { cookie.setSameSite(extractAttributeValue(attribute, setCookieHeader)); } }