Если ведение журнала - это все, что вам нужно, тогда я предлагаю написать реализацию javax.servlet.Filter
, которая обернет поставляемый HttpServletResponse
в оболочку, которая позволит вам выставлять файлы cookie после выполнения фильтра. Примерно так:
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 обрабатываются контейнером, а не приложением), вы не узнаете, используя этот подход. Но это может не иметь значения для вашей ситуации.
Единственный способ убедиться в этом - использовать плагин для браузера, такой как Live Http Headers для Firefox , или прокси-сервер для ведения журнала HTTP-посредник.