spring-security Sping Boot 中的Thymeleaf缓存和安全性

zbq4xfa0  于 2022-11-11  发布在  Spring
关注(0)|答案(3)|浏览(253)

在我的Web应用程序(Sping Boot + Spring Security + Thymeleaf)中,出于安全考虑,我禁用了缓存:

spring.thymeleaf.cache=false

我不记得我从哪里得到这些信息,也不记得这些信息是否真实。我的网站上有很多图片,我想缓存它们。您有什么建议吗?

bmp9r5qi

bmp9r5qi1#

看一看Spring Security – Cache Control Headers,它解释了ResponseEntity对象的缓存,该对象可以用于以字节数组的形式返回图像。
This还展示了一种缓存图片的方法,具体来说,虽然帖子本身是2015年的,但有些部分仍然可以相关。

cedebl8k

cedebl8k2#

实际上,spring.thymeleaf.cache属性与安全性无关,更多的是与性能有关。如果禁用Thymeleaf缓存,当需要解析模板时,模板将自动重新加载,这与服务器端模板的热交换有关。
这在开发过程中非常有用,因为您可以立即看到对模板的更改。否则,您必须重新启动应用程序。
请参阅Developer tools的说明文件,了解其用途。
Spring 4.x版本中有几种方法可以通过版本控制实现静态资源缓存(缓存破坏机制)。假设您通过Spring将图像作为静态资源提供,您可能需要研究这些方法。
如果图像本身不需要保护,那么将它们作为静态资源提供,并像这样应用缓存就足够了。

h7wcgrx3

h7wcgrx33#

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这样的反向代理。

相关问题