org.springframework.util.AntPathMatcher的使用
来源:互联网 发布:网络虚拟市场 编辑:程序博客网 时间:2024/06/07 01:10
就像名字提示的那样,路径模式是使用了Apache Ant的样式路径,Apache Ant样式的路径有三种通配符匹配方法。
通配符描述?匹配任何单字符*匹配0或者任意数量的字符**匹配0或者更多的目录使用方法比较简单,如下:
public static void main(String[] args){AntPathMatcher matcher = new AntPathMatcher();System.out.println(matcher.match("/**", "/resources/css/base.css"));System.out.println(matcher.match("**", "test/test1/test/2/test.jsp"));System.out.println(matcher.match("**", "/test/test1/test/2/test.jsp"));}
输出
truetruefalse贴上源码
protected boolean doMatch(String pattern, String path, boolean fullMatch,Map<String, String> uriTemplateVariables) {if (path.startsWith(this.pathSeparator) != pattern.startsWith(this.pathSeparator)) {return false;}String[] pattDirs = StringUtils.tokenizeToStringArray(pattern, this.pathSeparator, this.trimTokens, true);String[] pathDirs = StringUtils.tokenizeToStringArray(path, this.pathSeparator, this.trimTokens, true);int pattIdxStart = 0;int pattIdxEnd = pattDirs.length - 1;int pathIdxStart = 0;int pathIdxEnd = pathDirs.length - 1;// Match all elements up to the first **while (pattIdxStart <= pattIdxEnd && pathIdxStart <= pathIdxEnd) {String patDir = pattDirs[pattIdxStart];if ("**".equals(patDir)) {break;}if (!matchStrings(patDir, pathDirs[pathIdxStart], uriTemplateVariables)) {return false;}pattIdxStart++;pathIdxStart++;}if (pathIdxStart > pathIdxEnd) {// Path is exhausted, only match if rest of pattern is * or **'sif (pattIdxStart > pattIdxEnd) {return (pattern.endsWith(this.pathSeparator) ? path.endsWith(this.pathSeparator) :!path.endsWith(this.pathSeparator));}if (!fullMatch) {return true;}if (pattIdxStart == pattIdxEnd && pattDirs[pattIdxStart].equals("*") && path.endsWith(this.pathSeparator)) {return true;}for (int i = pattIdxStart; i <= pattIdxEnd; i++) {if (!pattDirs[i].equals("**")) {return false;}}return true;}else if (pattIdxStart > pattIdxEnd) {// String not exhausted, but pattern is. Failure.return false;}else if (!fullMatch && "**".equals(pattDirs[pattIdxStart])) {// Path start definitely matches due to "**" part in pattern.return true;}// up to last '**'while (pattIdxStart <= pattIdxEnd && pathIdxStart <= pathIdxEnd) {String patDir = pattDirs[pattIdxEnd];if (patDir.equals("**")) {break;}if (!matchStrings(patDir, pathDirs[pathIdxEnd], uriTemplateVariables)) {return false;}pattIdxEnd--;pathIdxEnd--;}if (pathIdxStart > pathIdxEnd) {// String is exhaustedfor (int i = pattIdxStart; i <= pattIdxEnd; i++) {if (!pattDirs[i].equals("**")) {return false;}}return true;}while (pattIdxStart != pattIdxEnd && pathIdxStart <= pathIdxEnd) {int patIdxTmp = -1;for (int i = pattIdxStart + 1; i <= pattIdxEnd; i++) {if (pattDirs[i].equals("**")) {patIdxTmp = i;break;}}if (patIdxTmp == pattIdxStart + 1) {// '**/**' situation, so skip onepattIdxStart++;continue;}// Find the pattern between padIdxStart & padIdxTmp in str between// strIdxStart & strIdxEndint patLength = (patIdxTmp - pattIdxStart - 1);int strLength = (pathIdxEnd - pathIdxStart + 1);int foundIdx = -1;strLoop:for (int i = 0; i <= strLength - patLength; i++) {for (int j = 0; j < patLength; j++) {String subPat = pattDirs[pattIdxStart + j + 1];String subStr = pathDirs[pathIdxStart + i + j];if (!matchStrings(subPat, subStr, uriTemplateVariables)) {continue strLoop;}}foundIdx = pathIdxStart + i;break;}if (foundIdx == -1) {return false;}pattIdxStart = patIdxTmp;pathIdxStart = foundIdx + patLength;}for (int i = pattIdxStart; i <= pattIdxEnd; i++) {if (!pattDirs[i].equals("**")) {return false;}}return true;}
0 0
- org.springframework.util.AntPathMatcher的使用
- org.springframework.util.AntPathMatcher 工具类
- org.springframework.util.StringUtils的使用
- org.springframework.util.StringUtils的使用
- org.springframework.util.StringUtils的使用
- org.springframework.util.StringUtils的使用
- org.springframework.util.StringUtils 使用
- org.springframework.util.StringUtils 使用
- org.springframework.util.StringUtils使用
- 有关org.springframework.util.Assert的介绍
- org.springframework.web.util.IntrospectorCleanupListener的用途
- org.springframework.web.util.IntrospectorCleanupListener的作用
- org.springframework.web.util.IntrospectorCleanupListener的用途
- org.springframework.util.Assert
- org.springframework.util.Assert
- org.springframework.util.Assert
- org.springframework.util.Assert
- org.springframework.util.Assert
- vs2010/MFC Ribbon风格修改窗体标题
- LeetCode46:Permutations
- Spark以及SparkR的安装(standalone模式)
- 承志医疗管理系统技术解析出院步骤(八)
- Android 属性动画简介
- org.springframework.util.AntPathMatcher的使用
- iOS 多Bu工程解耦
- Centos 安装Ftp客户端和开启vsftp服务
- 学习rpmbuild总结
- Android换肤技术
- C++/C链接过程详解
- java 多线程操作的管道流
- 匈牙利命名法、骆驼命名法、帕斯卡(pascal)命名法
- SAT数学练习题五道