Spring Boot Web 应用程序没有缓存控制标头

问题描述 投票:0回答:1

我正在使用 Spring boot 应用程序,并且需要通过禁用网页之间的缓存来启用安全性。 据我了解,默认情况下,Spring Security 为我们设置特定的缓存控制标头值,而我们无需配置任何内容。

但是对于我的 Web 应用程序,不存在以下响应标头。 缓存控制”、“无存储” Pragma”、“无缓存” 过期”、“0” 我尝试使用拦截器(实现 HandlerInterceptor)来设置它们,并在 preHandle、postHandle 和 afterCompletionMethod 中添加以下代码。

    response.setHeader("Cache-Control", "no-store"); // HTTP 1.1.
    response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
    response.setHeader("Expires", "0"); // Proxies. 

虽然控制来自这些方法并且设置了标头,但当我检查网络浏览器时,我没有看到这些标头。

可能是什么原因?

java spring-boot security cache-control
1个回答
4
投票

设置标题有不同类型。

我建议使用过滤器或配置来设置它。

配置

默认情况下,spring-boot 设置安全标头。使用 .defaultsDisabled() 您可以禁用它们并可以有选择地激活所需的标头。

@EnableWebSecurity
public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
    // ...
    .headers()
        // do not use any default headers unless explicitly listed
        .defaultsDisabled()
        .cacheControl();
}
}

将标题设置为以下设置:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0

有关配置的更多详细信息,请参见文档。 https://docs.spring.io/spring-security/site/docs/4.0.x/reference/html/headers.html

您也可以使用过滤器。

过滤器

@WebFilter("/filter-response-header/*")
public class AddResponseHeaderFilter implements Filter {
 
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, 
      FilterChain chain) throws IOException, ServletException {
        HttpServletResponse httpServletResponse = (HttpServletResponse) response;
        httpServletResponse.setHeader(
          "Cache-Control", "no-store");
httpServletResponse.setHeader(
              "Pragma", "no-cache");
httpServletResponse.setHeader(
              "Expires", "0");
        chain.doFilter(request, response);
    }

对于单个回复

HttpServlet响应:

HttpServletResponse response
response.addHeader("Cache-Control", "no-store");
response.addHeader("Pragma", "no-cache");
response.addHeader("Expires", "0");

更多信息请看这里:https://www.baeldung.com/spring-response-header

© www.soinside.com 2019 - 2024. All rights reserved.