让我们检查一下这个 hack 以抑制 HttpServletResponse 中的每个标题。
默认情况下无法从HttpServletResponse中删除标头,该接口不支持删除标头或其他功能。
使用自定义HttpFilter 可以通过做一些小技巧来禁止添加标题。
在过滤器链中,您可以添加 HttpServletResponseWrapper 并覆盖 addHeader 和 setHeader 方法。现在是在HttpServletResponse 中设置的自定义逻辑。确保您的过滤器是链中的第一个过滤器之一。
如果您使用的是 Spring Boot,请查看此示例 @Component(Java EE 也可以使用此技巧,因此请使用 Java EE 过滤器规范来启用过滤器):
package com.example.demo;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.IOException;
@Component
public class VaryHeaderFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
chain.doFilter(request, new HttpServletResponseWrapper((HttpServletResponse) response) {
@Override
public void addHeader(String name, String value) {
if (!HttpHeaders.VARY.equals(name)) {
super.addHeader(name, value);
}
}
@Override
public void setHeader(String name, String value) {
if (!HttpHeaders.VARY.equals(name)) {
super.setHeader(name, value);
}
}
});
}
}