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 9d8799eefc..4bd0ba6110 100644 --- a/src/main/java/com/alibaba/druid/support/http/WebStatFilter.java +++ b/src/main/java/com/alibaba/druid/support/http/WebStatFilter.java @@ -42,6 +42,8 @@ public class WebStatFilter implements Filter { private Set excludesPattern; private boolean createSession = false; + private String contextPath; + @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { @@ -49,13 +51,9 @@ public class WebStatFilter implements Filter { final String requestURI = getRequestURI(httpRequest); - if (excludesPattern != null) { - for (String pattern : excludesPattern) { - if (pathMatcher.matches(pattern, requestURI)) { - chain.doFilter(request, response); - return; - } - } + if (isExclusion(requestURI)) { + chain.doFilter(request, response); + return; } long startNano = System.nanoTime(); @@ -138,7 +136,21 @@ public class WebStatFilter implements Filter { return sessionId; } - public boolean isExclusion(String uri) { + public boolean isExclusion(String requestURI) { + if (excludesPattern == null) { + return false; + } + + if (contextPath != null && requestURI.startsWith(contextPath)) { + requestURI = requestURI.substring(contextPath.length()); + } + + for (String pattern : excludesPattern) { + if (pathMatcher.matches(pattern, requestURI)) { + return true; + } + } + return false; } @@ -156,7 +168,8 @@ public class WebStatFilter implements Filter { StatFilterContext.getInstance().addContextListener(statFilterContextListener); - webAppStat = new WebAppStat(); + this.contextPath = DruidWebUtils.getContextPath(config.getServletContext()); + webAppStat = new WebAppStat(contextPath); WebAppStatManager.getInstance().addWebAppStatSet(webAppStat); } diff --git a/src/main/java/com/alibaba/druid/util/DruidWebUtils.java b/src/main/java/com/alibaba/druid/util/DruidWebUtils.java index dc5bcc9b64..c43a699f83 100644 --- a/src/main/java/com/alibaba/druid/util/DruidWebUtils.java +++ b/src/main/java/com/alibaba/druid/util/DruidWebUtils.java @@ -1,5 +1,6 @@ package com.alibaba.druid.util; +import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; public class DruidWebUtils { @@ -18,4 +19,26 @@ public class DruidWebUtils { return ip; } + + private static String getContextPath_2_5(ServletContext context) { + String contextPath = context.getContextPath(); + + if (contextPath == null || contextPath.length() == 0) { + contextPath = "/"; + } + + return contextPath; + } + + public static String getContextPath(ServletContext context) { + if (context.getMajorVersion() == 2 && context.getMinorVersion() < 5) { + return null; + } + + try { + return getContextPath_2_5(context); + } catch (NoSuchMethodError error) { + return null; + } + } }