2017-02-02 11 views
2

Я новичок в SpringBoot.Как установить кеш-контроль в css и js-файлы в SpringBoot?

Я делаю свой проект на основе sample project of Springboot. Я хотел бы контролировать заголовки http для кеша только для файлов js/css.

Я добавил файл js test.js под номером src/resources/static, затем ссылаюсь на него в greeting.html.

Затем я следую некоторым ответам на StackOverflow и добавляю WebMvcConfiguration.java и WebSecurityConfig.java как таковые, но это не работает для меня.

Я уверен, что WebMvcConfiguration и WebSecurityConfig не должны использоваться вместе, или я настроил что-то неправильно. Я предпочитаю решение с Java Config, а не XML.

Я открываю ChromeDevTool для проверки ответа с сервера. Ответ http-заголовок

Accept-Ranges:bytes 
Cache-Control:no-store 
Content-Length:20 
Content-Type:application/javascript 
Date:Thu, 02 Feb 2017 10:53:14 GMT 
Expires: 
Last-Modified:Thu, 02 Feb 2017 10:52:49 GMT 
Pragma: 

Спасибо!

UPDATE: Когда я снял WebSecurityConfig, я получил следующий заголовок

Accept-Ranges:bytes 
Cache-Control:no-store 
Content-Length:20 
Content-Type:application/javascript 
Date:Thu, 02 Feb 2017 11:14:51 GMT 
Last-Modified:Thu, 02 Feb 2017 11:14:20 GMT 

greeting.html

<!DOCTYPE HTML> 
<html xmlns:th="http://www.thymeleaf.org"> 
<head> 
    <title>Getting Started: Serving Web Content</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <script th:src="@{/test.js}"></script> 
</head> 
<body> 
    <p th:text="'Hello, ' + ${name} + '!'" /> 
</body> 
</html> 

WebMvcConfiguration.java

@EnableWebMvc 
public class WebMvcConfiguration extends WebMvcConfigurerAdapter { 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/test.js").addResourceLocations("classpath:/resources/").setCachePeriod(31556926); 
    } 
} 

WebSecurityConfig.java

@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.csrf().disable() 
       .headers() 
       .defaultsDisabled() 
       .cacheControl(); 
    } 
} 
+1

@dur, я хотел бы установить 31556926. я не знаю, какой набор без кэширования в Spring Security. Как я могу это достичь? – Max

+1

@dur, я удалил WebSecurityConfig и WebMvcConfiguration. Я получил 'no store' в HTTP-заголовке ответа для' test.js' – Max

+1

Нет, другого фильтра нет. То же самое для .css – Max

ответ

-1

Попробуйте изменить линию

registry.addResourceHandler("/test.js").addResourceLocations("classpath:/resources/").setCachePeriod(31556926); 

для

registry.addResourceHandler("/test.js").addResourceLocations("classpath:/static/").setCachePeriod(31556926); 

см: https://docs.spring.io/spring/docs/2.5.x/javadoc-api/org/springframework/util/AntPathMatcher.html для получения дополнительной информации о конфигурации пути

и: How to enable browser caching in spring boot увидеть аналогичный пример

Я хотел бы также создать другую папку, как/статический/JS для лучшей организации