Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring CookieLocalerResolver:设置cookiePath_Spring_Spring Mvc_Cookies - Fatal编程技术网

Spring CookieLocalerResolver:设置cookiePath

Spring CookieLocalerResolver:设置cookiePath,spring,spring-mvc,cookies,Spring,Spring Mvc,Cookies,是否可以使用应用程序名称的值(自动)设置cookiePath? 例如,我有一个test.war,因此它将在bla.com/test/上可用,因此我希望我的cookie的路径是/test/,而不是/,这是默认值。 谢谢当您创建CookieLocalerResolver时,您可以设置路径,但它将是硬编码的 前 如果使用ServletContainer>=2.5和spring注释,则可以使用以下代码获取ContextPath,因此不必硬编码: @EnableWebMvc @Configuration

是否可以使用应用程序名称的值(自动)设置
cookiePath
? 例如,我有一个test.war,因此它将在bla.com/test/上可用,因此我希望我的cookie的路径是
/test/
,而不是
/
,这是默认值。
谢谢

当您创建
CookieLocalerResolver
时,您可以设置
路径
,但它将是硬编码的


如果使用ServletContainer>=2.5和spring注释,则可以使用以下代码获取ContextPath,因此不必硬编码:

@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;
    }

}

这就是为什么我会问(是否可以自动执行此操作)
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;
    }
}
@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;
    }

}