Java ShallowEtagHeaderFilter在WAS8应用服务器下不工作

Java ShallowEtagHeaderFilter在WAS8应用服务器下不工作,java,spring,spring-mvc,websphere,websphere-8,Java,Spring,Spring Mvc,Websphere,Websphere 8,org.springframework.web.filter.ShallowEtagHeaderFilter无法在WAS8应用程序服务器下设置响应头,声明“警告:无法设置头。响应已提交”。然而,当在Tomcat服务器下测试时,这可以很好地工作shallewetagheaderfilter确实在包装原始响应以延迟响应体的写入,但响应仍然在过滤器链执行后提交。这是一个可能的websphere错误吗?欢迎提出任何克服此问题的建议/解决方法。我通过重写ServletResponse.flushBuffe

org.springframework.web.filter.ShallowEtagHeaderFilter
无法在WAS8应用程序服务器下设置响应头,声明“警告:无法设置头。响应已提交”。然而,当在Tomcat服务器下测试时,这可以很好地工作
shallewetagheaderfilter
确实在包装原始响应以延迟响应体的写入,但响应仍然在过滤器链执行后提交。这是一个可能的websphere错误吗?欢迎提出任何克服此问题的建议/解决方法。

我通过重写
ServletResponse.flushBuffer
方法解决了此问题。在WAS8
flushBuffer
下,会过早地调用。将带有无操作的
flushBuffer
方法的
HttpServletResponseWrapper
传递给
ShallowEtagHeaderFilter
就成功了

public class HttpCacheFilter extends ShallowEtagHeaderFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

        HttpCacheResponseWrapper responseWrapper = new HttpCacheResponseWrapper(response);
        super.doFilterInternal(request, responseWrapper, filterChain);
    }

    private static class HttpCacheResponseWrapper extends HttpServletResponseWrapper {

        public HttpCacheResponseWrapper(HttpServletResponse response) {
            super(response);
        }

        @Override
        public void flushBuffer() throws IOException {
            // NOOP
        }
    }
}

我使用的是
extremecomponents
jar文件

chain.doFilter(request, new ExportResponseWrapper((HttpServletResponse) response))
WAS8中的“无法设置标头。响应已提交”

在ExportResponseWrapper类中,救了我的命


非常感谢……:)

我认为通过添加此自定义属性可以解决上述问题


com.ibm.ws.webcontainer.invokeFlushAfterService=false

你是否检查过这个@Sajith是的,我看到了答案。但是ShallowEtagHeaderFilter正在包装实际响应,因此在ShallowEtagHeaderFilter完成添加响应头之前,响应中不会写入任何内容。先生,您真是天赐良机。我讨厌在IBM打开PMR,这就彻底解决了这个问题。
    @Override
    public void flushBuffer() throws IOException {

    }