Tomcat doFilter() вызывается с зафиксированным ответом

StackOverflow https://stackoverflow.com/questions/45361

  •  09-06-2019
  •  | 
  •  

Вопрос

У меня есть фильтр Tomcat, который делегирует запросы объекту обработки в зависимости от URL-адреса.Это единственный фильтр в FilterChain.У меня есть приложение Ajax, которое забивает этот фильтр множеством запросов.

Недавно я заметил проблему, из-за которой фильтр doFilter Метод часто вызывается с зафиксированным ответом в качестве параметра (внутренне это ответ койота, помеченный как зафиксированный).

Мне кажется, что это может произойти только в том случае, если recycle() метод не вызывается для этого ответа койота.Я проверил, чтобы убедиться, что я не сохраняю ссылки ни на один из объектов запроса, ответа, потока вывода или записи.Кроме того, я позаботился о том, чтобы закрыть выходной поток в блокеfinally.Однако это не решает проблему.

Похоже, я делаю что-то, чтобы злоупотребить контейнером сервлетов, но у меня возникли проблемы с его отслеживанием.

Это было полезно?

Решение

Я пробовал использовать Tomcat 6.16 и 6.18.Это определенно единственный фильтр в цепочке.

Кажется, что-то сохраняет ссылку на выходной поток сервлета.Я завернул ServletOutputStream в свой собственный OutputStream, а затем убедился, что ссылка уничтожена.Это устранило проблему, и я больше не вижу переданного подтвержденного ответа.

Это странный побочный эффект хранения ссылки.Но я не думаю, что это можно квалифицировать как ошибку Tomcat.Скорее всего, это ошибка в ImageIO.createImageOutputStream(), которая, как я подозреваю, содержит ссылку.

Другие советы

Какую версию Tomcat вы используете?Для меня это звучит как ошибка в Tomcat, я не могу придумать никакой причины, по которой ваш метод doFilter должен вызываться с уже зафиксированным ответом (если этот фильтр является единственным в цепочке, вы уверены в этом? ).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top