ant匹配规则
规则:
字符wildcard 描述
? 匹配一个字符
* 匹配0个或者多个字符
** 匹配0个或者多个目录
官方示例:
1、com/t?st.jsp
匹配: com/test.jsp , com/tast.jsp , com/txst.jsp
2、com/*.jsp
匹配: com文件夹下的全部.jsp文件
3、com/**/test.jsp
匹配: com文件夹和子文件夹下的全部.jsp文件,
4、org/springframework/**/*.jsp
匹配: org/springframework文件夹和子文件夹下的全部.jsp文件
5、org/**/servlet/bla.jsp
匹配: org/springframework/servlet/bla.jsp,
org/springframework/testing/servlet/bla.jsp,
org/servlet/bla.jsp
PathMatcher接口方法讲解(AntPathMatcher实现PathMatcher接口)
说明:主要是判断是否匹配pattern,并解析出path中的参数
package org.springframework.util;
public interface PathMatcher {
/**
* 判断传入的path是否可以作为pattern使用
*/
boolean isPattern(String path);
/**
* 使用pattern匹配path
*/
boolean match(String pattern, String path);
/**
* 如名,是否开始部分匹配
*/
boolean matchStart(String pattern, String path);
/**
* 提取path中匹配到的部分,如pattern(myroot/*.html),path(myroot/myfile.html),返回myfile.html
*/
String extractPathWithinPattern(String pattern, String path);
/**
* 提取path中匹配到的部分,只是这边还需跟占位符配对为map,
* 如pattern(/hotels/{hotel}),path(/hotels/1),解析出"hotel"->"1"
*/
Map<String, String> extractUriTemplateVariables(String pattern, String path);
/**
* 提供比较器
*/
Comparator<String> getPatternComparator(String path);
/**
* 合并pattern,pattern1然后pattern2
*/
String combine(String pattern1, String pattern2);
}
URL首次匹配成功,将不再向下匹配,目前发现Shiro是这样
filterChainDefinitionMap.put("/**", "user,kickout,onlineSession,syncOnlineSession");
filterChainDefinitionMap.put("/login", "anon,captchaValidate");
比如上面的代码,由于/**
在前面,用于匹配所有路径,根据以上原则,所以后面的/login
永远也不会被匹配到了