如何删除HTTP响应头?

Dan*_*iel 28 servlets servlet-filters response-headers

我有一种情况,Content-Disposition必须删除其中一个响应标头.所以我想写一个servlet过滤器来做到这一点.但我意识到HttpServletResponse只有一种setHeader()方法,但没有方法可以删除它.我怎样才能做到这一点?

Bal*_*usC 44

之后,您无法通过标准Servlet API删除标头.最好的办法就是阻止设置标题.您可以通过创建一个Filter替换ServletResponse自定义HttpServletResponseWrapper实现来执行此操作,该实现会setHeader()在标头名称时跳过该作业Content-Disposition.

基本上:

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    chain.doFilter(request, new HttpServletResponseWrapper((HttpServletResponse) response) {
        public void setHeader(String name, String value) {
            if (!name.equalsIgnoreCase("Content-Disposition")) {
                super.setHeader(name, value);
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

只需将该过滤器映射到感兴趣的URL模式即可运行.

  • 人们应该重写`addHeader(String name,String value)`. (5认同)