From b72056f18133fb2dc80a98a48aae71733c7257af Mon Sep 17 00:00:00 2001 From: gitriver Date: Wed, 4 Jun 2014 21:35:02 +0800 Subject: [PATCH] =?UTF-8?q?ServletPathMatcher=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=8C=85=E5=90=AB*=E7=9A=84=E6=A8=A1=E5=BC=8F=E5=8C=B9?= =?UTF-8?q?=E9=85=8D=20pattern:=20/druid/*/index.html=20source:/druid/admi?= =?UTF-8?q?n/index.html?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../druid/util/ServletPathMatcher.java | 83 +++++++++++-------- 1 file changed, 47 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/alibaba/druid/util/ServletPathMatcher.java b/src/main/java/com/alibaba/druid/util/ServletPathMatcher.java index 3bd6090c3d..73dcedb9bb 100644 --- a/src/main/java/com/alibaba/druid/util/ServletPathMatcher.java +++ b/src/main/java/com/alibaba/druid/util/ServletPathMatcher.java @@ -17,45 +17,56 @@ package com.alibaba.druid.util; public class ServletPathMatcher implements PatternMatcher { private final static ServletPathMatcher instance = new ServletPathMatcher(); - + public static ServletPathMatcher getInstance() { return instance; } - /** - *

- * three type: endsWithMatch(eg. /xxx*=/xxx/xyz), startsWithMatch(eg. *.xxx=abc.xxx), equals(eg. /xxx=/xxx). - *

- * Notice: *xxx* will match *xxxyyyy. endsWithMatch first. - */ - @Override - public boolean matches(String pattern, String source) { - if (pattern == null || source == null) { - return false; - } - pattern = pattern.trim(); - source = source.trim(); - if (pattern.endsWith("*")) { - // pattern: /druid* source:/druid/index.html - int length = pattern.length() - 1; - if (source.length() >= length) { - if (pattern.substring(0, length).equals(source.substring(0, length))) { - return true; - } - } - } else if (pattern.startsWith("*")) { - // pattern: *.html source:/xx/xx.html - int length = pattern.length() - 1; - if (source.length() >= length && source.endsWith(pattern.substring(1))) { - return true; - } - } else { - // pattern: /druid/index.html source:/druid/index.html - if (pattern.equals(source)) { - return true; - } - } - return false; - } + /** + *

+ * three type: endsWithMatch(eg. /xxx*=/xxx/xyz), startsWithMatch(eg. + * *.xxx=abc.xxx), equals(eg. /xxx=/xxx). + *

+ * Notice: *xxx* will match *xxxyyyy. endsWithMatch first. + */ + @Override + public boolean matches(String pattern, String source) { + if (pattern == null || source == null) { + return false; + } + pattern = pattern.trim(); + source = source.trim(); + if (pattern.endsWith("*")) { + // pattern: /druid* source:/druid/index.html + int length = pattern.length() - 1; + if (source.length() >= length) { + if (pattern.substring(0, length).equals( + source.substring(0, length))) { + return true; + } + } + } else if (pattern.startsWith("*")) { + // pattern: *.html source:/xx/xx.html + int length = pattern.length() - 1; + if (source.length() >= length + && source.endsWith(pattern.substring(1))) { + return true; + } + } else if (pattern.contains("*")) { + // pattern: /druid/*/index.html source:/druid/admin/index.html + int start = pattern.indexOf("*"); + int end = pattern.lastIndexOf("*"); + if (source.startsWith(pattern.substring(0, start)) + && source.endsWith(pattern.substring(end + 1))) { + return true; + } + } else { + // pattern: /druid/index.html source:/druid/index.html + if (pattern.equals(source)) { + return true; + } + } + return false; + } }