是否可以编写servlet过滤器来检查HTTP响应代码?

时间:2009-06-29 09:58:16

标签: java servlets servlet-filters

是否可以编写servlet过滤器来检查HTTP响应代码?

我想编写一个过滤器来非破坏性地检查传出的HTTP响应代码。但是,似乎没有响应对象上的getResponseCode()类似方法。

我还不清楚应该如何处理来自servlet的未处理异常。我真的不希望这个过滤器实际设置任何东西。被动很好。

想法?

(我的另一种方法是编写一个自定义的Tomcat阀门,但这不是那么便携。)

2 个答案:

答案 0 :(得分:7)

您可以使用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;
    }
}

然后在你的过滤器中:

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() {
    }
}

答案 1 :(得分:0)

您是否考虑在原始响应类周围编写代理包装器?这样您就可以处理对象上的事件/方法调用。