繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM