CookieLocaleResolver is RFC6265 and language tag compliant by default

Like CookieLocaleResolver, LocaleChangeInterceptor parses both locale formats by default now. Since it does not need to render the locale, its languageTagCompliant property is not relevant anymore at all.

The parseLocale method in StringUtils validates the locale value now and turns an empty locale into null, compatible with parseLocaleString behavior and in particular aligned with web locale parsing needs.

Issue: SPR-16700
Issue: SPR-16651
This commit is contained in:
Juergen Hoeller
2018-07-17 17:57:59 +02:00
parent 955665b419
commit 88e4006790
5 changed files with 68 additions and 51 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2017 the original author or authors.
* Copyright 2002-2018 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.
@@ -83,7 +83,7 @@ public class CookieLocaleResolverTests {
@Test
public void testResolveLocaleContextWithInvalidLocale() {
MockHttpServletRequest request = new MockHttpServletRequest();
Cookie cookie = new Cookie("LanguageKoekje", "n-x GMT+1");
Cookie cookie = new Cookie("LanguageKoekje", "++ GMT+1");
request.setCookies(cookie);
CookieLocaleResolver resolver = new CookieLocaleResolver();
@@ -94,7 +94,7 @@ public class CookieLocaleResolverTests {
}
catch (IllegalStateException ex) {
assertTrue(ex.getMessage().contains("LanguageKoekje"));
assertTrue(ex.getMessage().contains("n-x GMT+1"));
assertTrue(ex.getMessage().contains("++ GMT+1"));
}
}
@@ -103,7 +103,7 @@ public class CookieLocaleResolverTests {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.GERMAN);
request.setAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE, new ServletException());
Cookie cookie = new Cookie("LanguageKoekje", "n-x GMT+1");
Cookie cookie = new Cookie("LanguageKoekje", "++ GMT+1");
request.setCookies(cookie);
CookieLocaleResolver resolver = new CookieLocaleResolver();
@@ -246,7 +246,7 @@ public class CookieLocaleResolverTests {
assertEquals(null, cookie.getDomain());
assertEquals(CookieLocaleResolver.DEFAULT_COOKIE_PATH, cookie.getPath());
assertFalse(cookie.getSecure());
assertEquals("de_AT", cookie.getValue());
assertEquals("de-AT", cookie.getValue());
request = new MockHttpServletRequest();
request.setCookies(cookie);
@@ -258,12 +258,12 @@ public class CookieLocaleResolverTests {
}
@Test
public void testSetAndResolveLocaleWithCountryAsLanguageTag() {
public void testSetAndResolveLocaleWithCountryAsLegacyJava() {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setLanguageTagCompliant(true);
resolver.setLanguageTagCompliant(false);
resolver.setLocale(request, response, new Locale("de", "AT"));
Cookie cookie = response.getCookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME);
@@ -272,13 +272,12 @@ public class CookieLocaleResolverTests {
assertEquals(null, cookie.getDomain());
assertEquals(CookieLocaleResolver.DEFAULT_COOKIE_PATH, cookie.getPath());
assertFalse(cookie.getSecure());
assertEquals("de-AT", cookie.getValue());
assertEquals("de_AT", cookie.getValue());
request = new MockHttpServletRequest();
request.setCookies(cookie);
resolver = new CookieLocaleResolver();
resolver.setLanguageTagCompliant(true);
Locale loc = resolver.resolveLocale(request);
assertEquals("de", loc.getLanguage());
assertEquals("AT", loc.getCountry());
@@ -315,7 +314,7 @@ public class CookieLocaleResolverTests {
}
@Test
public void testResolveLocaleWithoutCookie() throws Exception {
public void testResolveLocaleWithoutCookie() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN);
@@ -326,7 +325,7 @@ public class CookieLocaleResolverTests {
}
@Test
public void testResolveLocaleContextWithoutCookie() throws Exception {
public void testResolveLocaleContextWithoutCookie() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN);
@@ -339,7 +338,7 @@ public class CookieLocaleResolverTests {
}
@Test
public void testResolveLocaleWithoutCookieAndDefaultLocale() throws Exception {
public void testResolveLocaleWithoutCookieAndDefaultLocale() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN);
@@ -351,7 +350,7 @@ public class CookieLocaleResolverTests {
}
@Test
public void testResolveLocaleContextWithoutCookieAndDefaultLocale() throws Exception {
public void testResolveLocaleContextWithoutCookieAndDefaultLocale() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN);
@@ -366,7 +365,7 @@ public class CookieLocaleResolverTests {
}
@Test
public void testResolveLocaleWithCookieWithoutLocale() throws Exception {
public void testResolveLocaleWithCookieWithoutLocale() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN);
Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, "");
@@ -379,7 +378,7 @@ public class CookieLocaleResolverTests {
}
@Test
public void testResolveLocaleContextWithCookieWithoutLocale() throws Exception {
public void testResolveLocaleContextWithCookieWithoutLocale() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN);
Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, "");
@@ -394,7 +393,7 @@ public class CookieLocaleResolverTests {
}
@Test
public void testSetLocaleToNull() throws Exception {
public void testSetLocaleToNull() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN);
Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, Locale.UK.toString());
@@ -414,7 +413,7 @@ public class CookieLocaleResolverTests {
}
@Test
public void testSetLocaleContextToNull() throws Exception {
public void testSetLocaleContextToNull() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN);
Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, Locale.UK.toString());
@@ -436,7 +435,7 @@ public class CookieLocaleResolverTests {
}
@Test
public void testSetLocaleToNullWithDefault() throws Exception {
public void testSetLocaleToNullWithDefault() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN);
Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, Locale.UK.toString());
@@ -457,7 +456,7 @@ public class CookieLocaleResolverTests {
}
@Test
public void testSetLocaleContextToNullWithDefault() throws Exception {
public void testSetLocaleContextToNullWithDefault() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN);
Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, Locale.UK.toString());