Class CookieLocaleResolver
- All Implemented Interfaces:
- LocaleContextResolver,- LocaleResolver
LocaleResolver implementation that uses a cookie sent back to the user
 in case of a custom setting, with a fallback to the configured default locale,
 the request's Accept-Language header, or the default locale for the server.
 This is particularly useful for stateless applications without user sessions. The cookie may optionally contain an associated time zone value as well; alternatively, you may specify a default time zone.
Custom controllers can override the user's locale and time zone by calling
 #setLocale(Context) on the resolver, e.g. responding to a locale change
 request. As a more convenient alternative, consider using
 RequestContext.changeLocale(java.util.Locale).
- Since:
- 27.02.2003
- Author:
- Juergen Hoeller, Jean-Pierre Pawlak, Vedran Pavic, Sam Brannen
- See Also:
- 
Field SummaryFields
- 
Constructor SummaryConstructorsConstructorDescriptionConstructor with a default cookie name.CookieLocaleResolver(String cookieName) Constructor with a given cookie name.
- 
Method SummaryModifier and TypeMethodDescriptionprotected LocaledetermineDefaultLocale(HttpServletRequest request) Deprecated.protected TimeZoneDeprecated.as of 6.0, in favor ofsetDefaultTimeZoneFunction(Function)booleanReturn whether this resolver's cookies should be compliant with BCP 47 language tags instead of Java's legacy locale specification format.booleanReturn whether to reject cookies with invalid content (e.g.protected LocaleparseLocaleValue(String localeValue) Parse the given locale value coming from an incoming cookie.resolveLocale(HttpServletRequest request) Default implementation ofLocaleResolver.resolveLocale(HttpServletRequest)that delegates toLocaleContextResolver.resolveLocaleContext(HttpServletRequest), falling back toServletRequest.getLocale()if necessary.resolveLocaleContext(HttpServletRequest request) Resolve the current locale context via the given request.voidsetCookieDomain(String cookieDomain) Set the cookie "Domain" attribute.voidsetCookieHttpOnly(boolean cookieHttpOnly) Add the "HttpOnly" attribute to the cookie.voidsetCookieMaxAge(Integer cookieMaxAge) Deprecated.as of 6.0 in favor ofsetCookieMaxAge(Duration)voidsetCookieMaxAge(Duration cookieMaxAge) Set the cookie "Max-Age" attribute.voidsetCookieName(String cookieName) Deprecated.as of 6.0 in favor ofCookieLocaleResolver(String)voidsetCookiePath(String cookiePath) Set the cookie "Path" attribute.voidsetCookieSameSite(String cookieSameSite) Add the "SameSite" attribute to the cookie.voidsetCookieSecure(boolean cookieSecure) Add the "Secure" attribute to the cookie.voidsetDefaultLocaleFunction(Function<HttpServletRequest, Locale> defaultLocaleFunction) Set the function used to determine the default locale for the given request, called if no locale cookie has been found.voidsetDefaultTimeZoneFunction(Function<HttpServletRequest, TimeZone> defaultTimeZoneFunction) Set the function used to determine the default time zone for the given request, called if no locale cookie has been found.voidsetLanguageTagCompliant(boolean languageTagCompliant) Specify whether this resolver's cookies should be compliant with BCP 47 language tags instead of Java's legacy locale specification format.voidsetLocaleContext(HttpServletRequest request, HttpServletResponse response, LocaleContext localeContext) Set the current locale context to the given one, potentially including a locale with associated time zone information.voidsetRejectInvalidCookies(boolean rejectInvalidCookies) Specify whether to reject cookies with invalid content (e.g.protected StringtoLocaleValue(Locale locale) Render the given locale as a text value for inclusion in a cookie.Methods inherited from class org.springframework.web.servlet.i18n.AbstractLocaleContextResolvergetDefaultTimeZone, setDefaultTimeZoneMethods inherited from class org.springframework.web.servlet.i18n.AbstractLocaleResolvergetDefaultLocale, setDefaultLocaleMethods inherited from class java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.web.servlet.LocaleContextResolversetLocale
- 
Field Details- 
LOCALE_REQUEST_ATTRIBUTE_NAMEThe name of the request attribute that holds theLocale.Only used for overriding a cookie value if the locale has been changed in the course of the current request! Use RequestContext(Utils).getLocale()to retrieve the current locale in controllers or views.
- 
TIME_ZONE_REQUEST_ATTRIBUTE_NAMEThe name of the request attribute that holds theTimeZone.Only used for overriding a cookie value if the locale has been changed in the course of the current request! Use RequestContext(Utils).getTimeZone()to retrieve the current time zone in controllers or views.
- 
DEFAULT_COOKIE_NAMEThe default cookie name used if none is explicitly set.
 
- 
- 
Constructor Details- 
CookieLocaleResolverConstructor with a given cookie name.- Since:
- 6.0
 
- 
CookieLocaleResolverpublic CookieLocaleResolver()Constructor with a default cookie name.
 
- 
- 
Method Details- 
setCookieNameDeprecated.as of 6.0 in favor ofCookieLocaleResolver(String)Set the name of cookie created by this resolver.- Parameters:
- cookieName- the cookie name
 
- 
setCookieMaxAgeSet the cookie "Max-Age" attribute.By default, this is set to -1 in which case the cookie persists until browser shutdown. - Since:
- 6.0
- See Also:
 
- 
setCookieMaxAgeDeprecated.as of 6.0 in favor ofsetCookieMaxAge(Duration)Variant ofsetCookieMaxAge(Duration)with a value in seconds.
- 
setCookiePathSet the cookie "Path" attribute.By default, this is set to "/".
- 
setCookieDomainSet the cookie "Domain" attribute.
- 
setCookieSecurepublic void setCookieSecure(boolean cookieSecure) Add the "Secure" attribute to the cookie.
- 
setCookieHttpOnlypublic void setCookieHttpOnly(boolean cookieHttpOnly) Add the "HttpOnly" attribute to the cookie.
- 
setCookieSameSiteAdd the "SameSite" attribute to the cookie.By default, this is set to "Lax".- Since:
- 6.0
- See Also:
 
- 
setLanguageTagCompliantpublic void setLanguageTagCompliant(boolean languageTagCompliant) Specify whether this resolver's cookies should be compliant with BCP 47 language tags instead of Java's legacy locale specification format.The default is true, as of 5.1. Switch this tofalsefor rendering Java's legacy locale specification format. For parsing, this resolver leniently accepts the legacyLocale.toString()format as well as BCP 47 language tags in any case.- Since:
- 4.3
- See Also:
 
- 
isLanguageTagCompliantpublic boolean isLanguageTagCompliant()Return whether this resolver's cookies should be compliant with BCP 47 language tags instead of Java's legacy locale specification format.- Since:
- 4.3
 
- 
setRejectInvalidCookiespublic void setRejectInvalidCookies(boolean rejectInvalidCookies) Specify whether to reject cookies with invalid content (e.g. invalid format).The default is true. Turn this off for lenient handling of parse failures, falling back to the default locale and time zone in such a case.
- 
isRejectInvalidCookiespublic boolean isRejectInvalidCookies()Return whether to reject cookies with invalid content (e.g. invalid format).- Since:
- 5.1.7
 
- 
setDefaultLocaleFunctionSet the function used to determine the default locale for the given request, called if no locale cookie has been found.The default implementation returns the configured default locale, if any, and otherwise falls back to the request's Accept-Languageheader locale or the default locale for the server.- Parameters:
- defaultLocaleFunction- the function used to determine the default locale
- Since:
- 6.0
- See Also:
 
- 
setDefaultTimeZoneFunctionpublic void setDefaultTimeZoneFunction(Function<HttpServletRequest, TimeZone> defaultTimeZoneFunction) Set the function used to determine the default time zone for the given request, called if no locale cookie has been found.The default implementation returns the configured default time zone, if any, or nullotherwise.- Parameters:
- defaultTimeZoneFunction- the function used to determine the default time zone
- Since:
- 6.0
- See Also:
 
- 
resolveLocaleDescription copied from interface:LocaleContextResolverDefault implementation ofLocaleResolver.resolveLocale(HttpServletRequest)that delegates toLocaleContextResolver.resolveLocaleContext(HttpServletRequest), falling back toServletRequest.getLocale()if necessary.- Parameters:
- request- the request to resolve the locale for
- Returns:
- the current locale (never null)
 
- 
resolveLocaleContextDescription copied from interface:LocaleContextResolverResolve the current locale context via the given request.This is primarily intended for framework-level processing; consider using RequestContextUtilsorRequestContextfor application-level access to the current locale and/or time zone.The returned context may be a TimeZoneAwareLocaleContext, containing a locale with associated time zone information. Simply apply aninstanceofcheck and downcast accordingly.Custom resolver implementations may also return extra settings in the returned context, which again can be accessed through downcasting. - Parameters:
- request- the request to resolve the locale context for
- Returns:
- the current locale context (never null
- See Also:
 
- 
setLocaleContextpublic void setLocaleContext(HttpServletRequest request, @Nullable HttpServletResponse response, @Nullable LocaleContext localeContext) Description copied from interface:LocaleContextResolverSet the current locale context to the given one, potentially including a locale with associated time zone information.- Parameters:
- request- the request to be used for locale modification
- response- the response to be used for locale modification
- localeContext- the new locale context, or- nullto clear the locale
- See Also:
 
- 
parseLocaleValueParse the given locale value coming from an incoming cookie.The default implementation calls StringUtils.parseLocale(String), accepting theLocale.toString()format as well as BCP 47 language tags.- Parameters:
- localeValue- the locale value to parse
- Returns:
- the corresponding Localeinstance
- Since:
- 4.3
- See Also:
 
- 
toLocaleValueRender the given locale as a text value for inclusion in a cookie.The default implementation calls Locale.toString()orLocale.toLanguageTag(), depending on the"languageTagCompliant"configuration property.- Parameters:
- locale- the locale to convert to a string
- Returns:
- a String representation for the given locale
- Since:
- 4.3
- See Also:
 
- 
determineDefaultLocaleDeprecated.as of 6.0, in favor ofsetDefaultLocaleFunction(Function)Determine the default locale for the given request, called if no locale cookie has been found.The default implementation returns the configured default locale, if any, and otherwise falls back to the request's Accept-Languageheader locale or the default locale for the server.- Parameters:
- request- the request to resolve the locale for
- Returns:
- the default locale (never null)
- See Also:
 
- 
determineDefaultTimeZone@Deprecated(since="6.0") @Nullable protected TimeZone determineDefaultTimeZone(HttpServletRequest request) Deprecated.as of 6.0, in favor ofsetDefaultTimeZoneFunction(Function)Determine the default time zone for the given request, called if no locale cookie has been found.The default implementation returns the configured default time zone, if any, or nullotherwise.- Parameters:
- request- the request to resolve the time zone for
- Returns:
- the default time zone (or nullif none defined)
- See Also:
 
 
- 
setDefaultLocaleFunction(Function)