我有一个缓存 Servlet 过滤器,如果响应中设置了 cookie,如何确保它不会发送缓存标头?

发布于 2024-11-06 12:03:07 字数 184 浏览 0 评论 0原文

我有一个缓存 Servlet 过滤器,该过滤器将为某些 URL 添加一个 Cache-Control: public, max-age=x 标头到响应中。

但它不应该公开缓存任何设置 cookie 的响应。如何检查以确保响应没有设置 cookie(包括确保 servlet 容器不会发送 JSESSIONID)?

I have a caching Servlet Filter, the filter will, for certain URLs, add a Cache-Control: public, max-age=x header to responses.

But it shouldn't publicly cache any responses that are setting any cookies. How do I check to make sure the response doesn't have cookies set (including making sure the servlet container isn't going to send a JSESSIONID)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

思念绕指尖 2024-11-13 12:03:08

您可以使用 HttpServletResponseWrapper

public void doFilter(..) {
   chain.doFilter(request, new Wrapper(response));
}

其中 Wrapper 扩展 HttpServletResponseWrapper,覆盖 addCookie 方法,调用 super .addCookie(..) 并将布尔值设置为 true,表示已添加 cookie。该布尔值可以位于包装器的字段中,也可以作为请求属性。无论哪种方式,您都可以稍后在需要检查 cookie 是否已添加时阅读。

对于 jsessionid (附加到 URL),您可以覆盖 encodeRedirectURL,并检查是否调用super.encodeRedirectURL(..) 将附加 jsessionid

但不缓存正在发送会话 cookie 的资源可能是错误的。任何资源都可能发送会话 cookie(如果它是第一个打开的资源)。

You can use a HttpServletResponseWrapper:

public void doFilter(..) {
   chain.doFilter(request, new Wrapper(response));
}

where the Wrapper extends HttpServletResponseWrapper, overrides the addCookie method, call super.addCookie(..) and sets a boolean to true, meaning a cookie has been added. That boolean can be either in a field of the wrapper or as request attribute. Either way you can read it later when you need to check if a cookie has been added.

For jsessionid (appended to the URL) you can override the encodeRedirectURL, and check whether the call to super.encodeRedirectURL(..) will append the jsessionid

But not caching a resource that is sending a session cookie might be wrong. Any resource might send a session cookie, if it is the first one to open.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文