在我的网络应用程序(Spring Boot + Spring Security + Thymeleaf)中,出于安全考虑,我禁用了缓存:
spring.thymeleaf.cache=false
我不记得从哪里获得这些信息,或者它是否真实。 我的网站上有很多图片,我想要缓存它们。你会推荐什么?
答案 0 :(得分:0)
看一下Spring Security – Cache Control Headers,它解释了ResponseEntity对象的缓存,它可以用来以字节数组的形式返回一个图像。
This也显示了一种专门缓存图像的方法,虽然帖子本身是从2015年开始的,但某些部分仍然可以相关。
答案 1 :(得分:0)
实际上spring.thymeleaf.cache
属性与安全性无关,但与性能有关。如果禁用Thymeleaf缓存,模板将在需要解析时自动重新加载,这与热交换服务器端模板有关。
这在开发过程中非常有用,因为您可以立即看到模板的更改。如果不是,则必须重新启动应用程序。
请参阅Developer tools上有关其用途的文档。
Spring 4.x以上版本有几种方法可以通过版本控制实现static resource caching(缓存清除机制)。假设您通过Spring将图像作为静态资源提供服务,您可能需要查看这些内容。
如果图像本身不需要保护,那么将它们作为静态资源提供,应用缓存应该就足够了。
答案 2 :(得分:0)
Spring Security会自动“缓存”所有请求which is by design。
但是对于不需要由Spring Security管理的图像,可以在WebSecurityConfigurerAdapter中为特定资源目录禁用它(在这种情况下,images目录将位于../resources/static目录中)
@Override
public void configure(WebSecurity webSecurity) {
webSecurity.ignoring().antMatchers(
"/images/**"
)
}
spring.resources.cache-period=your value here in seconds
当您想要对模板进行热重载时,您只想关闭开发中的Thymeleaf缓存。
测试它适用于
curl -X GET -I https://your-site/images/foo.png
这将在浏览器级别缓存它们。如果需要在服务器级别缓存它们,可以使用像nginx这样的反向代理。