Spring Security - 无法避免缓存控制

Fel*_*ral 7 spring caching spring-security

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

在我的控制器中,我将标头设置为缓存控制,基于文件等等.但是总是存在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 security.xml有:

    <security:headers disabled="true"/>
Run Code Online (Sandbox Code Playgroud)

任何人都有一个好主意来解决这个问题?

请记住,要加载我需要通过控制器加载的图像,我从不直接调用静态.

aha*_*aha 16

Cache-Control头可以在每个动作的基础由重写它们进行控制HttpServletResponse:

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

    // ...
}
Run Code Online (Sandbox Code Playgroud)

无需摆弄Spring Security配置.

请参阅http://docs.spring.io/spring-security/site/docs/current/reference/html/headers.html#headers-cache-control.

  • 这将复制标题而不是覆盖它.我得到`no-cache,no-store,max-age = 0,must-revalidate,max-age = 7200` (3认同)

Gri*_*ory 12

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

@Configuration
@EnableWebMvcSecurity
class SpringWebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(final HttpSecurity http) throws Exception {
        http.headers().cacheControl().disable();
    }
}
Run Code Online (Sandbox Code Playgroud)

这将删除CacheControlHeadersWriter,Spring将不再编写缓存控制头.

  • 禁用默认的 Spring 安全行为是个坏主意。您在此处阅读更多信息:https://www.baeldung.com/spring-security-cache-control-headers (3认同)

iku*_*men 0

根据您链接到的Spring Security 参考文献(3.2.0),

所有默认标题都可以使用没有子元素的元素轻松添加

简单地添加headers本身将打开所有子元素(例如缓存控制,xxs,...)。要么根本不包含标题,要么明确指定要启用哪些子元素。

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