[英]I have a caching Servlet Filter, How do I make sure it doesn't send caching headers if there are cookies set on the response?
我有一个高速缓存的Servlet过滤器,该过滤器将为某些URL添加一个Cache-Control: public, max-age=x
标头到响应。
但是,它不应该公开缓存设置cookie的任何响应。 如何检查以确保响应中没有设置cookie(包括确保servlet容器不会发送JSESSIONID)?
您可以使用HttpServletResponseWrapper
:
public void doFilter(..) {
chain.doFilter(request, new Wrapper(response));
}
Wrapper
在其中扩展HttpServletResponseWrapper
,重写addCookie
方法,调用super.addCookie(..)
并将boolean设置为true
,这意味着已添加cookie。 该布尔值可以在包装器的字段中,也可以作为请求属性。 无论哪种方式,以后都需要检查是否已添加Cookie时都可以阅读。
对于jsessionid
(附加到URL),您可以覆盖encodeRedirectURL
,并检查对super.encodeRedirectURL(..)
的调用是否将追加jsessionid
但是不缓存正在发送会话cookie的资源可能是错误的。 如果是第一个打开的资源,则任何资源都可以发送会话cookie。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.