从这个问题可以看出,Spring Security为Spring Boot管理缓存。从Spring Boot 文档中,它显示了如何使用以下方法设置资源的缓存:
spring.resources.cache-period= # cache timeouts in headers sent to browser
在cache- period为Spring Boot所有预定义的静态位置是伟大的(即/css**,/js/**,/images/**),但我也产生manifest.appcache了我的静态资产的离线下载,并且由于所有上述弹簧安全的/boot发回缓存头与manifest.appcache
cache- period
/css**
/js/**
/images/**
manifest.appcache
"method": "GET", "path": "/manifest.appcache", "response": { "X-Application-Context": "application:local,flyway,oracle,kerberos:8080", "Expires": "Tue, 06 Oct 2015 16:59:39 GMT", "Cache-Control": "max-age=31556926, must-revalidate", "status": "304" }
我想知道如何为添加排除对象manifest.appcache。IE和Chrome似乎对appcache都“做正确的事”,而不管我的头是什么,但是FF似乎在指出appcache何时更改以及我认为我的缓存头正在搞砸的时候显得有些奇怪。
编辑:我应该从WebMvcAutoConfiguration的源代码中添加它,它显示了如何为资源设置缓存,我只是不确定如何针对我的1种情况有选择地禁用w / o,这可能会破坏此文件中弹簧引导设置的其余部分。
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { if (!this.resourceProperties.isAddMappings()) { logger.debug("Default resource handling disabled"); return; } Integer cachePeriod = this.resourceProperties.getCachePeriod(); if (!registry.hasMappingForPattern("/webjars/**")) { registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/") .setCachePeriod(cachePeriod); } if (!registry.hasMappingForPattern("/**")) { registry.addResourceHandler("/**") .addResourceLocations(RESOURCE_LOCATIONS) .setCachePeriod(cachePeriod); } }
感谢您的问与答!
我们遇到了类似的问题:所有浏览器(Chrome,Safari,IE)都没有缓存清单文件本身,而是在更改后重新加载了清单文件。
但是,在Spring Boot中设置缓存周期设置并不能完全解决问题。另外,我不想为Spring Boot应用程序提供的所有文件设置缓存控制参数,而只是禁用清单的缓存。
我的解决方案包括两部分:
# rev 7
现在,我们通过Maven生成的唯一内部版本号更改缓存清单文件中的“ rev”参数:https : //github.com/dukecon/dukecon_html5/commit/b60298f0b856a7e54c97620f278982142e3e1f45)。