Как добавить заголовок Cache-Control к статическому ресурсу в Spring Boot?

128
27 февраля 2021, 17:00

Как включить кэширование статических ресурсов.
Знаю что можно добавить дерективу в application.yml

spring.resources.cache.cachecontrol.max-age: 3600

Но пытаюсь так же реализовать прочие примеры, но они не работают

Файл WebSecurityConfig

@EnableOAuth2Sso
@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // @formatter:off
        http
                .antMatcher("/**")
                    .authorizeRequests()
                .antMatchers("/", "/login**", "/error**", "/js/**", "/favicon.ico")
                    .permitAll()
                .anyRequest()
                    .authenticated()
                .and()
                    .logout()
                    .logoutSuccessUrl("/")
                    .permitAll()
                .and()
                    .csrf().disable();
        // @formatter:on
    }
}

Файл: WebMvcConfig

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry
                .addResourceHandler("/resources/**")
                .addResourceLocations("/resources/")
                .setCachePeriod(31556926)
                // или 
                // .setCacheControl(CacheControl.maxAge(1, TimeUnit.DAYS))
        ;
    }
}

По пути лежит: resources/static/js/bundle.js

λ curl -I http://localhost:9000/js/bundle.js
HTTP/1.1 200
Last-Modified: Sun, 23 Jun 2019 11:37:55 GMT
Cache-Control: no-store
Accept-Ranges: bytes
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
Content-Type: application/javascript
Content-Length: 1033085
Date: Sun, 23 Jun 2019 11:44:17 GMT
Answer 1

Методом тыка, и переборов, найдено решение.

Файл: WebSecurityConfig

@EnableOAuth2Sso
@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // @formatter:off
        http
                .antMatcher("/**")
                    .authorizeRequests()
                .antMatchers("/", "/login**", "/error**")
                    .permitAll()
                .anyRequest()
                    .authenticated()
                .and()
                    .logout()
                    .logoutSuccessUrl("/")
                    .permitAll()
                .and()
                    .csrf().disable()
        ;
        // @formatter:on
    }
    @Override
    public void configure(WebSecurity web) throws Exception {
        // @formatter:off
        web
            .ignoring()
            .antMatchers("/js/**", "/css/**", "/favicon.ico")
        ;
        // @formatter:on
    }
}

Файл: WebMvcConfig

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry
                .addResourceHandler("/**")
                .addResourceLocations("classpath:/static/")
                .setCacheControl(CacheControl.maxAge(365, TimeUnit.DAYS)
                        .cachePrivate().mustRevalidate())
                .resourceChain(true)
                .addResolver(new PathResourceResolver())
        ;
    }
}

Response:

λ curl -I http://localhost:9000/js/bundle.js
HTTP/1.1 200
Last-Modified: Sun, 23 Jun 2019 11:37:55 GMT
Cache-Control: max-age=31536000, must-revalidate, private
Accept-Ranges: bytes
Content-Type: application/javascript
Content-Length: 1033085
Date: Sun, 23 Jun 2019 13:24:58 GMT
READ ALSO
Аналог функции Assembly.load из C# в Java

Аналог функции Assembly.load из C# в Java

В C# есть функция Assemblyload - запускающая сборку из массива байт

104
При компиляции проекта выдает ошибку:“java.exe” exited with code 3

При компиляции проекта выдает ошибку:“java.exe” exited with code 3

Я уже делал все возможные махинации с расположением jdk и в cmd у меня javac работает как должноВыдает вот это:

114
Как изменить цвет во всех классах которые указаны в JCheckBox

Как изменить цвет во всех классах которые указаны в JCheckBox

Как изменить цвет GUI во всех классах с помощью одного класса и JCheckBox'a когда нажимаешь на него меняется цвет к примеру на красный когда снимаешь...

104