Spring Boot 中的 Thymeleaf 缓存和安全性
Posted
技术标签:
【中文标题】Spring Boot 中的 Thymeleaf 缓存和安全性【英文标题】:Thymeleaf cache and security in Spring Boot 【发布时间】:2018-04-21 02:40:55 【问题描述】:在我的网络应用程序(Spring Boot + Spring Security + Thymeleaf)中,出于安全目的,我禁用了缓存:
spring.thymeleaf.cache=false
我不记得我从哪里得到这些信息,甚至不记得它是否属实。 我的网站上有很多图片,我想缓存它们。你会推荐什么?
【问题讨论】:
【参考方案1】:看看Spring Security – Cache Control Headers,它解释了 ResponseEntity 对象的缓存,它可以用来以字节数组的形式返回图像。
This 还专门展示了一种缓存图像的方法,虽然帖子本身是 2015 年的,但某些部分仍然是相关的。
【讨论】:
【参考方案2】:实际上spring.thymeleaf.cache
属性与安全无关,而更多与性能有关。如果禁用 Thymeleaf 缓存,模板将在需要解析时自动重新加载,这与热交换服务器端模板有关。
这在开发过程中很有帮助,因为您可以立即看到模板的更改。如果不是,您将不得不重新启动您的应用程序。
请参阅Developer tools 上的文档了解其用途。
Spring 4.x 版本有几种方法可以通过版本控制(缓存清除机制)实现static resource caching。假设您通过 Spring 将图像作为静态资源提供,您可能需要研究这些。
如果图像本身不需要保护,将它们作为静态资源提供并应用缓存就足够了。
【讨论】:
【参考方案3】:Spring Security 将自动“缓存”所有请求,which is by design。
但是对于那些不需要由 Spring Security 管理的图像,您可以在 WebSecurityConfigurerAdapter 中为特定资源目录禁用它(在这种情况下,图像目录将在您的 ../resources/static 目录中) .
@Override
public void configure(WebSecurity webSecurity)
webSecurity.ignoring().antMatchers(
"/images/**"
)
而Spring Boot way 是添加
spring.resources.cache-period=your value here in seconds
您只想在开发中关闭 Thymeleaf 缓存,当您想要对模板进行热重载时。
测试它是否适用
curl -X GET -I https://your-site/images/foo.png
这将在浏览器级别缓存它们。如果您需要在服务器级别缓存它们,您可以使用像 nginx 这样的反向代理。
【讨论】:
以上是关于Spring Boot 中的 Thymeleaf 缓存和安全性的主要内容,如果未能解决你的问题,请参考以下文章
Thymeleaf 模板 在spring boot 中的引用和应用
IntelliJ中的Spring boot + thymeleaf:无法解析变量
Spring Boot + Thymeleaf 应用程序中的缓存破坏
Thymeleaf 无法检测到 spring-boot 项目中的模板