如果日志记录是你所追求的,那么我建议编写一个实现,它将所提供的包装在一个包装器中,允许你在过滤器执行后公开cookie。像这样:javax.servlet.Filter
HttpServletResponse
public class CookieLoggingFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException ,ServletException {
ResponseWrapper wrappedResponse = new ResponseWrapper((HttpServletResponse) response);
filterChain.doFilter(request, wrappedResponse);
// use a real logger here, naturally :)
System.out.println("Cookies: " + wrappedResponse.cookies);
}
private class ResponseWrapper extends HttpServletResponseWrapper {
private Collection<Cookie> cookies = new ArrayList<Cookie>();
public ResponseWrapper(HttpServletResponse response) {
super(response);
}
@Override
public void addCookie(Cookie cookie) {
super.addCookie(cookie);
cookies.add(cookie);
}
}
// other methods here
}
一个重要的警告:这不会显示哪些cookie被发送回浏览器,它只会显示应用程序代码添加到响应中的cookie。如果容器选择更改、添加或忽略这些 Cookie(例如,会话 Cookie 由容器而不是应用程序处理),则您不会知道使用此方法。但这对你的情况可能并不重要。
唯一确定的方法是使用浏览器插件,如Firefox的Live Http Headers,或中间人HTTP日志记录代理。