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));
}
}