package melcoe.test;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
public final class SnoopFilter
implements Filter {
private static final Logger log = Logger.getLogger(SnoopFilter.class);
private FilterConfig filterConfig = null;
/*
* (non-Javadoc)
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
* javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException,
ServletException {
// Need to make sure we are dealing with HttpServlets
if (!(request instanceof HttpServletRequest)
|| !(response instanceof HttpServletResponse)) {
log.error("Servlets are not HttpServlets!");
throw new ServletException("Servlets are not HttpServlets!");
}
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
String uri = req.getRequestURI();
if (log.isDebugEnabled()) {
log.debug("Incoming Request, URI: " + uri);
log.debug("Headers: ");
Enumeration headerNames = req.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = (String) headerNames.nextElement();
Enumeration values = req.getHeaders(headerName);
while (values.hasMoreElements()) {
String value = (String) values.nextElement();
log.debug(headerName + ": " + value);
}
}
log.debug("userPrincipal: " + req.getUserPrincipal());
log.debug("remoteUser: " + req.getRemoteUser());
}
chain.doFilter(req, res);
if (log.isDebugEnabled()) {
log.debug("Outgoing Response, URI: " + uri);
}
}
/*
* (non-Javadoc)
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig filterCfg) throws ServletException {
log.info("Initialising Servlet Filter: " + this.getClass().getName());
filterConfig = filterCfg;
// exit if no config. Should always have a config.
if (filterConfig == null) {
log.error("No config found!");
throw new ServletException("No config found for filter (filterConfig)");
}
}
/*
* (non-Javadoc)
* @see javax.servlet.Filter#destroy()
*/
public void destroy() {
log.info("Destroying Servlet Filter: " + this.getClass().getName());
filterConfig = null;
}
}