ShallowEtagHeaderFilter在WAS8应用服务器下无法运行

Som*_*omu 5 java websphere spring spring-mvc websphere-8

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

Som*_*omu 7

我通过重写ServletResponse.flushBuffer方法解决了这个问题.在WAS8下flushBuffer被提前调用.通过HttpServletResponseWrapper无操作flushBuffer方法传递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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)