001package org.javasimon.console; 002 003import java.io.IOException; 004import javax.servlet.Filter; 005import javax.servlet.FilterChain; 006import javax.servlet.FilterConfig; 007import javax.servlet.ServletException; 008import javax.servlet.ServletRequest; 009import javax.servlet.ServletResponse; 010import javax.servlet.http.HttpServletRequest; 011import javax.servlet.http.HttpServletResponse; 012 013import org.javasimon.Manager; 014import org.javasimon.utils.SimonUtils; 015 016/** 017 * Simon Console filter does the same as {@link SimonConsoleServlet} and provides just an alternative way 018 * to include embeddable console in your applications. Putting this filter before the Simon Servlet filter is also 019 * the easiest way how to avoid monitoring of the console itself. 020 * 021 * @author Richard Richter 022 * @since 2.3 023 */ 024@SuppressWarnings("UnusedParameters") 025public class SimonConsoleFilter implements Filter { 026 private SimonConsoleRequestProcessor requestProcessor; 027 028 @Override 029 public final void init(FilterConfig config) { 030 // Manager 031 Manager manager = SimonConsoleServlet.getManager(config.getServletContext()); 032 // URL Prefix 033 String urlPrefix = config.getInitParameter(SimonConsoleServlet.URL_PREFIX_INIT_PARAMETER); 034 // Plugin classes 035 String pluginClasses = config.getInitParameter(SimonConsoleServlet.PLUGIN_CLASSES_INIT_PARAMETER); 036 // Create request processor 037 requestProcessor = SimonConsoleRequestProcessor.create(urlPrefix, manager, pluginClasses); 038 039 } 040 041 /** 042 * Wraps the HTTP request with Simon measuring. Separate Simons are created for different URIs (parameters 043 * ignored). 044 * 045 * @param servletRequest HTTP servlet request 046 * @param servletResponse HTTP servlet response 047 * @param filterChain filter chain 048 * @throws java.io.IOException possibly thrown by other filter/serlvet in the chain 049 * @throws javax.servlet.ServletException possibly thrown by other filter/serlvet in the chain 050 */ 051 public final void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 052 HttpServletRequest request = (HttpServletRequest) servletRequest; 053 HttpServletResponse response = (HttpServletResponse) servletResponse; 054 055 String localPath = request.getRequestURI().substring(request.getContextPath().length()); 056 if (localPath.startsWith(requestProcessor.getUrlPrefix())) { 057 requestProcessor.processRequest(request, response); 058 return; 059 } 060 061 filterChain.doFilter(request, response); 062 } 063 064 @Override 065 public void destroy() { 066 } 067}