У меня есть кэширующий фильтр сервлетов. Как мне убедиться, что он не отправляет кэширующие заголовки, если в ответе установлены куки? - PullRequest
0 голосов
/ 13 мая 2011

У меня есть кэширующий фильтр сервлетов, фильтр для определенных URL добавляет заголовок Cache-Control: public, max-age=x к ответам.

Но это не должно публично кэшировать любые ответы, которые устанавливают какие-либо куки. Как проверить, чтобы в ответе не были установлены файлы cookie (в том числе, чтобы контейнер сервлета не отправлял JSESSIONID)?

1 Ответ

3 голосов
/ 13 мая 2011

Вы можете использовать HttpServletResponseWrapper:

public void doFilter(..) {
   chain.doFilter(request, new Wrapper(response));
}

, где Wrapper расширяет HttpServletResponseWrapper, переопределяет метод addCookie, вызывает super.addCookie(..) и устанавливает логическое значение true,означает, что печенье было добавлено.Это логическое значение может быть либо в поле оболочки, либо в качестве атрибута запроса.В любом случае вы можете прочитать его позже, когда вам нужно проверить, был ли добавлен файл cookie.

Для jsessionid (добавлено к URL) вы можете переопределить encodeRedirectURL, ипроверьте, добавит ли вызов super.encodeRedirectURL(..) jsessionid

, но не кэширование ресурса, отправляющего файл cookie сеанса, может быть неправильным.Любой ресурс может отправить сеансовый файл cookie, если он открыт первым.

...