当前位置: 首页 > 知识库问答 >
问题:

Spring Security-无法避免缓存控制

席银龙
2023-03-14

我有一个应用程序,并使用spring的控制器映射将图像加载到我的用户。(输入流、响应等)。

在我的控制器中,我将头设置为缓存控制,基于文件等。但在所有请求中总是有pragma:no-cache和Cache-Control:“max-age=0”,这取代了我的响应设置。

我一直在想方设法解决这个问题,但什么都没用。

我已经阅读了所有页面,并尝试了我找到的所有相关内容:http://docs.spring.io/autorepo/docs/spring-security/3.2.0.CI-SNAPSHOT/reference/html/headers.html

我的Spring安全。xml具有:

    <security:headers disabled="true"/>

有人有解决这个问题的好主意吗?

记住,要通过控制器加载需要加载的图像,我从不直接调用static。

共有3个答案

诸超
2023-03-14

根据您链接到的Spring Security reference(3.2.0),

使用不带子元素的元素可以轻松添加所有默认标头

只需自行添加标题即可打开所有子元素(例如缓存控制、xxs等)。要么根本不包括头,要么显式指定要启用的子元素。

顺便说一句,我不认为禁用是标头的属性(对于3.2.0)。如果您使用的是4.0版,则有一个禁用属性以及disable-dedefault,这可能是您想要的。

薛望
2023-03-14

如果使用基于Java的配置,可以通过以下方式禁用缓存控制标头:

@Configuration
@EnableWebMvcSecurity
class SpringWebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(final HttpSecurity http) throws Exception {
        http.headers().cacheControl().disable();
    }
}

这将删除CacheControlHeadersWriter,Spring将不再写入缓存控制头。

佴英奕
2023-03-14

可以通过在HttpServletResponse中重写每个操作来控制缓存控制头:

@RequestMapping(value = "/foo", method = RequestMethod.GET)
public String someAction(HttpServletResponse response) {
    response.setHeader("Cache-Control", "no-transform, public, max-age=86400");

    // ...
}

无需修改Spring Security配置。

看见http://docs.spring.io/spring-security/site/docs/current/reference/html/headers.html#headers-缓存控制。

 类似资料:
  • 我正在使用Guava缓存热数据。当缓存中不存在数据时,我必须从数据库中获取数据: 我的问题是当数据不存在于数据库中时,我希望它返回并且不做任何缓存。但Guava保存与缓存中的关键字,并抛出一个异常,当我得到它: com.google.common.cache.CacheLoader$InvalidCacheLoadExcION: CacheLoader为shisoft键返回null。 我们如何避免

  • 我的web项目一旦有前端页面的更新就需要清理浏览器缓存后才能看到最新效果,有时不清理不但不能看到最新效果还会出现页面布局错乱,如何能避免这种情况,我想要更新前端页面,用户也不需要清理浏览器缓存,页面关闭重新打开就能显示最新效果

  • 问题内容: 在编写RESTful Web服务时,如果在客户端(当前是.NET胖客户端)上启用任何类型的缓存,则会遇到问题。默认情况下,Jersey不发送任何类型的缓存控制标头,因此客户端将自动缓存大多数页面(这似乎是有效的行为)。 我希望默认情况下,Jersey发送“ no-cache”的缓存控件,然后特别是响应将覆盖该缓存控件。 有没有办法用泽西岛做到这一点? 我发现RESTeasy可以使用@N

  • 我们已经配置nginx服务器添加缓存控制头到公共和到期时间到1个月。但是当我们从浏览器发出请求时,客户端正在添加缓存控制:无缓存头。正因为如此,它每次都是新鲜下载内容,而不是提供缓存版本。 我怎样才能缓存静态文件? 如果我从终端触发请求,服务器添加的缓存控制标头在响应标头中可见。

  • 使用 rax-plugin-pwa 插件,可以方便快捷的使用 Service Worker 控制缓存,以获得更快的加载速度。 首先,安装 build-plugin-rax-pwa 插件依赖: $ npm install build-plugin-rax-pwa --save 在工程配置 build.json 中添加 pwa 插件并配置缓存目标: { "plugins": [ [

  • 问题内容: 有什么方法可以使JAXB不保存其值是@Element批注中指定的默认值的字段,然后在从XML加载null或空值的元素时对其设置值?一个例子: 应生成: 而当加载 我正在尝试执行此操作,以生成干净的XML配置文件,并使其可读性更强且尺寸更小。 敬请谅解,谢谢。 问题答案: 您可以通过在get / set方法中使用逻辑并将逻辑放入其中来执行以下操作: 例 演示版 输出量 想要查询更多的信息