Java Servlet过滤器:如何从HttpServletResponse获取所有头文件?

Java Servlet过滤器:如何从HttpServletResponse获取所有头文件?,java,httpresponse,Java,Httpresponse,这是我的过滤器: public class SimpleFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException {} @Override public void doFilter(ServletRequest request, ServletResponse response, Fil

这是我的过滤器:

public class SimpleFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        // where is the httpResponse.getHeaderNames()?
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {}

}
我正在使用Servlet2.5

我可以设置一个标题,验证响应中是否存在某些标题,但我无法获取所有标题。在HttpServletRequest中存在此方法(
HttpServletRequest.getHeaderNames()

那么,在HttpServletResponse中,
getHeaderNames()
的等价物在哪里


谢谢

真奇怪。。。在2.5API中似乎没有这个访问器(参见javadoc)

作为一种解决方法,您可以使用过滤器将响应封装在具有getter的包装器中(确保包装器过滤器在任何其他操作之前运行)

乙二醇

公共类MyResponseWrapper扩展了HttpServletResponseWrapper{
私有集headerNames=新HashSet();
公共MyResponseWrapper(HttpServletResponse委托){
超级(代表);
}
public void addHeader(字符串名称、字符串值){
super.addHeader(名称、值);
添加(名称);
}
公共集getHeaderNames(){
返回集合。immutableSet(headerNames);
}
}
公共类WrapperFilter实现过滤器{
public void doFilter(ServletRequest请求、ServletResponse响应、FilterChain链)抛出IOException、ServletException{
doFilter(请求,新的MyResponseWrapper(响应));
}
}

然后,您可以调用
((MyResponseWrapper)response.getHeaderNames()
。我意识到这有点不妥:)

您使用的是什么版本的Servlet API?该方法在3.0中是正确的(有一些限制)。我猜您忘记将
ServletResponse
转换为
HttpServletResponse
@SotiriosDelimanolis,2.5:(。我将在问题中添加此信息。@LanceJava,我正在这样做,请参阅代码。问题是我的Servlet版本,2.5。@DownVoter,为什么是否定的?
public class MyResponseWrapper extends HttpServletResponseWrapper {
    private Set<String> headerNames = new HashSet<String>();

    public MyResponseWrapper(HttpServletResponse delegate) {
       super(delegate);
    }

    public void addHeader(String name, String value) {
        super.addHeader(name, value);
        headerNames.add(name);
    }

    public Set<String> getHeaderNames() {
        return Collections.immutableSet(headerNames);
    }
}


public class WrapperFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
       chain.doFilter(request, new MyResponseWrapper(response));
    }
}