ShallowEtagHeaderFilter在WAS8应用服务器下无法运行 [英] ShallowEtagHeaderFilter does not work under WAS8 app server

查看:173
本文介绍了ShallowEtagHeaderFilter在WAS8应用服务器下无法运行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

org.springframework.web.filter.ShallowEtagHeaderFilter is unable to set response header under WAS8 application server stating "WARNING: Cannot set header. Response already committed". However this works fine when tested under Tomcat server. ShallowEtagHeaderFilter is indeed wrapping the original response to delay the writing of response body, but still the response comes as committed after the filter chain's execution. Is this a possible websphere bug? Any suggestion / workaround to overcome this issue is welcome.

推荐答案

我通过覆盖 ServletResponse解决了这个问题。 flushBuffer 方法。在WAS8下 flushBuffer 过早被调用。将 HttpServletResponseWrapper 传递给 ShallowEtagHeaderFilter 做了诀窍。

I solved this issue by overriding ServletResponse.flushBuffer method. Under WAS8 flushBuffer is getting called prematurely. Passing a HttpServletResponseWrapper with a no-operation flushBuffer method to ShallowEtagHeaderFilter did the trick.

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
        }
    }
}

这篇关于ShallowEtagHeaderFilter在WAS8应用服务器下无法运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆