Spring boot 2在不使用Spring安全性的情况下添加缓存响应头

时间:2018-04-24 09:57:08

标签: spring spring-mvc spring-boot

我使用的是Spring boot 2,在application.properties文件中,我已经指定了缓存值,如下所示:

spring.resources.cache.cachecontrol.max-age=0
spring.resources.cache.cachecontrol.no-cache=true
spring.resources.cache.cachecontrol.must-revalidate=true
spring.resources.cache.cachecontrol.no-store=true

除了max-age之外,Chrome开发者工具网络选项卡中没有任何标题可见。

在我的应用程序中,我正在发送Get请求并将ResponseEntity<Long>作为回复。

在响应中添加这些缓存标头是否需要做其他事情?

1 个答案:

答案 0 :(得分:1)

我使用过滤器来设置HttpHeader。它可以为您提供对设置值的精细控制,并在传递给控制器​​之前验证您的请求。

public class CORSFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest req, HttpServletResponse res, FilterChain chain)
            throws ServletException, IOException {

        res.setHeader("Access-Control-Allow-Origin", "*");
        res.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
        res.setHeader("Access-Control-Max-Age", "3600");
        res.setHeader("Access-Control-Allow-Headers",
                "X-PINGOTHER,Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization");
        res.addHeader("Access-Control-Expose-Headers", "xsrf-token");

        res.setHeader("Cache-Control","no-cache,no-store,must-revalidate,private,max-age=0");
        res.setHeader("Pragma","no-cache");
        res.setDateHeader("Expires",0);        


        if(!res.containsHeader("X-FRAME-OPTIONS"))
            res.addHeader("X-FRAME-OPTIONS", "SAMEORIGIN");

        if ("OPTIONS".equals(req.getMethod())) {
            res.setStatus(HttpServletResponse.SC_OK);
        } else {
            chain.doFilter(req, res);
        }
    }
}