From c7e33b6697247ecd940f04d8988a962ddc7fe6f9 Mon Sep 17 00:00:00 2001 From: Zhanming Qi Date: Sun, 12 Aug 2012 20:19:02 +0800 Subject: [PATCH] add WebStatFilter's exclusions, support /foo*, *.html, /bar/index.html --- .../druid/support/http/WebStatFilter.java | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/alibaba/druid/support/http/WebStatFilter.java b/src/main/java/com/alibaba/druid/support/http/WebStatFilter.java index 7681bb159d..9d8799eefc 100644 --- a/src/main/java/com/alibaba/druid/support/http/WebStatFilter.java +++ b/src/main/java/com/alibaba/druid/support/http/WebStatFilter.java @@ -1,6 +1,9 @@ package com.alibaba.druid.support.http; import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; import javax.servlet.Filter; import javax.servlet.FilterChain; @@ -21,6 +24,8 @@ import com.alibaba.druid.support.http.stat.WebURIStat; import com.alibaba.druid.support.logging.Log; import com.alibaba.druid.support.logging.LogFactory; import com.alibaba.druid.util.DruidWebUtils; +import com.alibaba.druid.util.PatternMatcher; +import com.alibaba.druid.util.ServletPathMatcher; public class WebStatFilter implements Filter { @@ -28,7 +33,13 @@ public class WebStatFilter implements Filter { private WebAppStat webAppStat = null; private WebStatFilterContextListener statFilterContextListener = new WebStatFilterContextListener(); + /** + * PatternMatcher used in determining which paths to react to for a given request. + */ + protected PatternMatcher pathMatcher = new ServletPathMatcher(); + private final String EXCLUSIONS = "exclusions"; + private Set excludesPattern; private boolean createSession = false; @Override @@ -38,9 +49,13 @@ public class WebStatFilter implements Filter { final String requestURI = getRequestURI(httpRequest); - if (isExclusion(requestURI)) { - chain.doFilter(request, response); - return; + if (excludesPattern != null) { + for (String pattern : excludesPattern) { + if (pathMatcher.matches(pattern, requestURI)) { + chain.doFilter(request, response); + return; + } + } } long startNano = System.nanoTime(); @@ -133,6 +148,10 @@ public class WebStatFilter implements Filter { @Override public void init(FilterConfig config) throws ServletException { + String exclusions = config.getInitParameter(EXCLUSIONS); + if (exclusions != null && exclusions.trim().length() != 0) { + excludesPattern = new HashSet(Arrays.asList(exclusions.split("\\s*,\\s*"))); + } config.getServletContext().getContextPath(); StatFilterContext.getInstance().addContextListener(statFilterContextListener); @@ -239,4 +258,4 @@ public class WebStatFilter implements Filter { } } } -} \ No newline at end of file +}