我有一个缓存 Servlet 过滤器,如果响应中设置了 cookie,如何确保它不会发送缓存标头?
我有一个缓存 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用
HttpServletResponseWrapper
:其中
Wrapper
扩展HttpServletResponseWrapper
,覆盖addCookie
方法,调用super .addCookie(..)
并将布尔值设置为true
,表示已添加 cookie。该布尔值可以位于包装器的字段中,也可以作为请求属性。无论哪种方式,您都可以稍后在需要检查 cookie 是否已添加时阅读。对于
jsessionid
(附加到 URL),您可以覆盖encodeRedirectURL
,并检查是否调用super.encodeRedirectURL(..)
将附加 jsessionid但不缓存正在发送会话 cookie 的资源可能是错误的。任何资源都可能发送会话 cookie(如果它是第一个打开的资源)。
You can use a
HttpServletResponseWrapper
:where the
Wrapper
extendsHttpServletResponseWrapper
, overrides theaddCookie
method, callsuper.addCookie(..)
and sets a boolean totrue
, 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 theencodeRedirectURL
, and check whether the call tosuper.encodeRedirectURL(..)
will append the jsessionidBut 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.