Is it possible to write a servlet filter to take inspect HTTP response codes?
java, servlet-filters, servlets
Solution
you can wrap your outgoing response using HttpServletResponseWrapper:
class GetStatusWrapper extends HttpServletResponseWrapper {
private int status;
GetStatusWrapper(HttpServletResponse response) {
super(response);
}
@Override
public void setStatus(int sc) {
super.setStatus(sc);
status = sc;
}
public int getStatus() {
return status;
}
}
then in your filter:
public class GetStatusResponseFilter implements Filter {
@Override
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain filterChain)
throws IOException, ServletException {
GetStatusWrapper wrapper;
wrapper = new GetStatusWrapper((HttpServletResponse) response);
filterChain.doFilter(request, wrapper);
System.out.println("status = " + wrapper.getStatus());
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
@Override
public void destroy() {
}
}
Problem
Is it possible to write a servlet filter to take inspect HTTP response codes? I want to write a filter that will non-destructively inspect outgoing HTTP response codes. But, there does not seem to be a `getResponseCode()` like method on the Response object. It is also not clear to me how unhandled exceptions from the servlet are supposed to be dealt with. I really don't want this filter to actually set anything. Passive is good. Ideas? (My other approach involves writing a custom Tomcat valve, but that is not so portable.)