是否可以编写servlet过滤器来检查HTTP响应代码?
我想编写一个过滤器来非破坏性地检查传出的HTTP响应代码。但是,似乎没有响应对象上的getResponseCode()
类似方法。
我还不清楚应该如何处理来自servlet的未处理异常。我真的不希望这个过滤器实际设置任何东西。被动很好。
想法?
(我的另一种方法是编写一个自定义的Tomcat阀门,但这不是那么便携。)
答案 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)
您是否考虑在原始响应类周围编写代理包装器?这样您就可以处理对象上的事件/方法调用。