使用已提交的响应调用Tomcat doFilter()

Cas*_*son 7 java tomcat servlets

我有一个Tomcat过滤器,它根据URL将请求委托给一个处理对象.这是唯一的过滤器FilterChain.我有一个Ajax应用程序,可以通过大量请求来破坏这个过滤器.

最近我注意到一个问题,过滤器的doFilter方法通常使用已提交的响应作为参数调用(在内部,它是标记为已提交的土狼响应).

在我看来,这种情况发生的唯一方法是,如果recycle()没有在这个土狼响应上调用该方法.我已经检查过以确保我没有保留对任何request,response,outputStream或writer对象的引用.另外,我确保在finally块中关闭outputStream.但是,这不能解决此问题.

这听起来像我正在做一些滥用servlet容器的事情,但我无法跟踪它.

Cas*_*son 4

我尝试过使用 Tomcat 6.16 和 6.18。这绝对是链中唯一的过滤器。

似乎有什么东西保留了对 servlet 输出流的引用。我将 ServletOutputStream 包装在我自己的 OutputStream 中,然后确保引用被销毁。这解决了该问题,以便我不再看到传入的已提交响应。

这是持有引用的一个奇怪的副作用。但我不认为它符合 Tomcat bug 的条件。我怀疑 ImageIO.createImageOutputStream() 中的错误更有可能持有引用。