如何在基于 java 的 Web 应用程序中覆盖重复的 http 缓存 headers?

How to overwrite the duplicate http cache headers in a java based web app?

我们正在将 webpack 集成到我们遗留的 java 基于 webapp 中。作为第一步,添加 frontend-maven-plugin 以安装节点、npm 和 webpack。能够捆绑 js 和 css 很好。

我还在 webpack 中使用缓存破坏。捆绑的 js 和 css 被散列并且名称格式为 bundle.hash.js。我为 jsp 编写了一个自定义标记来传递参数并获取散列文件。这一切似乎工作正常,现在的想法是在捆绑文件上设置一年的长期缓存。

我编写了一个实现 javax.servlet.Filter 并设置缓存 headers 的自定义过滤器。并在 web.xml

中为 js 添加了此过滤器,css 映射
int cacheAge = 31536000; // setting long year cache
  response.setHeader("Cache-Control", "max-age="+ cacheAge);

问题是当我 运行 bundle.hash.js 文件的应用程序时,有 2 cache-controls 正在设置。结果 bundle.*.js 文件没有被缓存。对于 bundle.hash.css,只有 31536000 的 max-age 已按预期设置,并且已被浏览器缓存。

cache-control: max-age=31536000
cache-control: no-cache, no-store, max-age=0, must-revalidate

我无法弄清楚如何以及从哪里为 js 文件设置 no-cache、max-age=0。我想知道 node/webpack 是否在后台设置它?如果是这样,我如何在 servlet 过滤器中覆盖它?

花了几个小时终于想通了。 Spring 安全性正在添加 no-cache、max-age=0 header,尽管我已经在 servlet 过滤器中设置了 max-age。我在 dist 目录下的捆绑文件的 context.xml 文件中将安全性设置为 none,似乎工作正常。