Class SessionLocaleResolver

All Implemented Interfaces:
LocaleContextResolver, LocaleResolver

public class SessionLocaleResolver extends AbstractLocaleContextResolver
LocaleResolver implementation that uses a locale attribute in the user's session 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 most appropriate if the application needs user sessions anyway, i.e. when the HttpSession does not have to be created just for storing the user's locale. The session may optionally contain an associated time zone attribute 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, for example, responding to a locale change request. As a more convenient alternative, consider using RequestContext.changeLocale(Locale).

In contrast to CookieLocaleResolver, this strategy stores locally chosen locale settings in the Servlet container's HttpSession. As a consequence, those settings are just temporary for each session and therefore lost when each session terminates.

Note that there is no direct relationship with external session management mechanisms such as the "Spring Session" project. This LocaleResolver will simply evaluate and modify corresponding HttpSession attributes against the current HttpServletRequest.

Since:
27.02.2003
Author:
Juergen Hoeller, Vedran Pavic
See Also:
  • Field Details

  • Constructor Details

    • SessionLocaleResolver

      public SessionLocaleResolver()
  • Method Details

    • setLocaleAttributeName

      public void setLocaleAttributeName(String localeAttributeName)
      Specify the name of the corresponding attribute in the HttpSession, holding the current Locale value.

      The default is an internal LOCALE_SESSION_ATTRIBUTE_NAME.

      Since:
      4.3.8
    • setTimeZoneAttributeName

      public void setTimeZoneAttributeName(String timeZoneAttributeName)
      Specify the name of the corresponding attribute in the HttpSession, holding the current TimeZone value.

      The default is an internal TIME_ZONE_SESSION_ATTRIBUTE_NAME.

      Since:
      4.3.8
    • setDefaultLocaleFunction

      public void setDefaultLocaleFunction(Function<jakarta.servlet.http.HttpServletRequest, Locale> defaultLocaleFunction)
      Set the function used to determine the default locale for the given request, called if no Locale session attribute has been found.

      The default implementation returns the configured default locale, if any, and otherwise falls back to the request's Accept-Language header locale or the default locale for the server.

      Parameters:
      defaultLocaleFunction - the function used to determine the default locale
      Since:
      6.0
      See Also:
    • setDefaultTimeZoneFunction

      public void setDefaultTimeZoneFunction(Function<jakarta.servlet.http.HttpServletRequest, @Nullable TimeZone> defaultTimeZoneFunction)
      Set the function used to determine the default time zone for the given request, called if no TimeZone session attribute has been found.

      The default implementation returns the configured default time zone, if any, or null otherwise.

      Parameters:
      defaultTimeZoneFunction - the function used to determine the default time zone
      Since:
      6.0
      See Also:
    • resolveLocale

      public Locale resolveLocale(jakarta.servlet.http.HttpServletRequest request)
      Description copied from interface: LocaleResolver
      Resolve the current locale via the given request.

      Can return a default locale as fallback in any case.

      Parameters:
      request - the request to resolve the locale for
      Returns:
      the current locale (never null)
    • resolveLocaleContext

      public LocaleContext resolveLocaleContext(jakarta.servlet.http.HttpServletRequest request)
      Description copied from interface: LocaleContextResolver
      Resolve the current locale context via the given request.

      This is primarily intended for framework-level processing; consider using RequestContextUtils or RequestContext for 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 an instanceof check 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:
    • setLocaleContext

      public void setLocaleContext(jakarta.servlet.http.HttpServletRequest request, @Nullable jakarta.servlet.http.HttpServletResponse response, @Nullable LocaleContext localeContext)
      Description copied from interface: LocaleContextResolver
      Set 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 null to clear the locale
      See Also: