ShallowEtagHeaderFilter在WAS8应用服务器下不起作用
问题内容:
org.springframework.web.filter.ShallowEtagHeaderFilter
无法在WAS8应用程序服务器下设置响应标头,说明为“
警告:无法设置标头。响应已提交
”。但是,在Tomcat服务器上进行测试时,此方法工作正常。ShallowEtagHeaderFilter
确实包装了原始响应以延迟响应主体的编写,但是响应仍然是在过滤器链执行后提交的。这是可能的Websphere错误吗?欢迎提供任何解决此问题的建议/解决方法。
问题答案:
我通过覆盖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
}
}
}