From 421fabb2c4b2d6bf7ad825ceb278e18c4c8349ab Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 13 Apr 2017 13:07:54 +0200 Subject: [PATCH] Configurable locale/timezone attribute name for SessionLocaleResolver Issue: SPR-15450 (cherry picked from commit cec36fe) --- .../servlet/i18n/SessionLocaleResolver.java | 38 ++++++++++++++++--- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/SessionLocaleResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/SessionLocaleResolver.java index 6437f87b41c..7291b47a587 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/SessionLocaleResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/SessionLocaleResolver.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2017 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. @@ -79,9 +79,35 @@ public class SessionLocaleResolver extends AbstractLocaleContextResolver { public static final String TIME_ZONE_SESSION_ATTRIBUTE_NAME = SessionLocaleResolver.class.getName() + ".TIME_ZONE"; + private String localeAttributeName = LOCALE_SESSION_ATTRIBUTE_NAME; + + private String timeZoneAttributeName = TIME_ZONE_SESSION_ATTRIBUTE_NAME; + + + /** + * Specify the name of the corresponding attribute in the {@code HttpSession}, + * holding the current {@link Locale} value. + *

The default is an internal {@link #LOCALE_SESSION_ATTRIBUTE_NAME}. + * @since 4.3.8 + */ + public void setLocaleAttributeName(String localeAttributeName) { + this.localeAttributeName = localeAttributeName; + } + + /** + * Specify the name of the corresponding attribute in the {@code HttpSession}, + * holding the current {@link TimeZone} value. + *

The default is an internal {@link #TIME_ZONE_SESSION_ATTRIBUTE_NAME}. + * @since 4.3.8 + */ + public void setTimeZoneAttributeName(String timeZoneAttributeName) { + this.timeZoneAttributeName = timeZoneAttributeName; + } + + @Override public Locale resolveLocale(HttpServletRequest request) { - Locale locale = (Locale) WebUtils.getSessionAttribute(request, LOCALE_SESSION_ATTRIBUTE_NAME); + Locale locale = (Locale) WebUtils.getSessionAttribute(request, this.localeAttributeName); if (locale == null) { locale = determineDefaultLocale(request); } @@ -93,7 +119,7 @@ public class SessionLocaleResolver extends AbstractLocaleContextResolver { return new TimeZoneAwareLocaleContext() { @Override public Locale getLocale() { - Locale locale = (Locale) WebUtils.getSessionAttribute(request, LOCALE_SESSION_ATTRIBUTE_NAME); + Locale locale = (Locale) WebUtils.getSessionAttribute(request, localeAttributeName); if (locale == null) { locale = determineDefaultLocale(request); } @@ -101,7 +127,7 @@ public class SessionLocaleResolver extends AbstractLocaleContextResolver { } @Override public TimeZone getTimeZone() { - TimeZone timeZone = (TimeZone) WebUtils.getSessionAttribute(request, TIME_ZONE_SESSION_ATTRIBUTE_NAME); + TimeZone timeZone = (TimeZone) WebUtils.getSessionAttribute(request, timeZoneAttributeName); if (timeZone == null) { timeZone = determineDefaultTimeZone(request); } @@ -120,8 +146,8 @@ public class SessionLocaleResolver extends AbstractLocaleContextResolver { timeZone = ((TimeZoneAwareLocaleContext) localeContext).getTimeZone(); } } - WebUtils.setSessionAttribute(request, LOCALE_SESSION_ATTRIBUTE_NAME, locale); - WebUtils.setSessionAttribute(request, TIME_ZONE_SESSION_ATTRIBUTE_NAME, timeZone); + WebUtils.setSessionAttribute(request, this.localeAttributeName, locale); + WebUtils.setSessionAttribute(request, this.timeZoneAttributeName, timeZone); }