Spring CookieLocaleResolver: set cookiePath

Is it possible to set cookiePath value of the application name (automatically)? For example, I have test.war, so it will be available on bla.com/test/, so I want my cookie path to be /test/ rather than / , which is the default value. thank you

+4
source share
2 answers

When creating a CookieLocaleResolver you can set the path , but it will be hardcoded.

Example

 <bean id="localeResolver" class="CookieLocaleResolver"> <property name="cookiePath" value="test" /> </bean> 

Another possible solution is to override LocaleResolver

 public class MyCookieLocaleResolver extends CookieLocaleResolver { @Override public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { if (locale != null) { // Set request attribute and add cookie. request.setAttribute(LOCALE_REQUEST_ATTRIBUTE_NAME, locale); addCookie(response, locale.toString()); } else { // Set request attribute to fallback locale and remove cookie. request.setAttribute(LOCALE_REQUEST_ATTRIBUTE_NAME, determineDefaultLocale(request)); removeCookie(response); } } public void addCookie(HttpServletRequest request, HttpServletResponse response, String cookieValue) { Cookie cookie = createCookie(request, cookieValue); Integer maxAge = getCookieMaxAge(); if (maxAge != null) { cookie.setMaxAge(maxAge); } if (isCookieSecure()) { cookie.setSecure(true); } response.addCookie(cookie); if (logger.isDebugEnabled()) { logger.debug("Added cookie with name [" + getCookieName() + "] and value [" + cookieValue + "]"); } } protected Cookie createCookie(HttpServletRequest request, String cookieValue) { Cookie cookie = new Cookie(getCookieName(), cookieValue); if (getCookieDomain() != null) { cookie.setDomain(getCookieDomain()); } cookie.setPath(request.getContextPath()); return cookie; } } 
+2
source

If you use the annotation ServletContainer> = 2.5 and spring, you can use the following code to get ContextPath, so you don't need to hardcode:

 @EnableWebMvc @Configuration @ComponentScan("com.controller") public class WebConfig extends WebMvcConfigurerAdapter { @Autowired private ServletContext servletContext; @Bean public LocaleResolver localeResolver(){ CookieLocaleResolver resolver = new CookieLocaleResolver(); resolver.setDefaultLocale(new Locale("en")); resolver.setCookieName("locale"); resolver.setCookiePath(servletContext.getContextPath()); resolver.setCookieMaxAge(31536000); return resolver; } } 
+1
source

Source: https://habr.com/ru/post/1486784/


All Articles