AntPathMatcher
是 Spring 框架提供的一个用于路径匹配的工具类,主要用于匹配 URL 路径。在 Spring 中,AntPathMatcher
被广泛用于 URL 路径的模式匹配,如 Spring Security、Spring MVC 等。
AntPathMatcher
的 match()
方法遵循一定的匹配规则,它支持通配符(wildcards)来匹配路径。下面是 AntPathMatcher.match()
方法的匹配规则和相关示例。
1. *
:匹配路径中的一个部分
-
*
匹配 URL 中的一个路径部分(以/
为分隔符),即一个单词或一段路径(不包含/
)。 -
示例:
/backend/*
可以匹配/backend/login
、/backend/logout
,但不能匹配/backend/page/login
。/backend/*/login
可以匹配/backend/page/login
、/backend/user/login
,但是不能匹配/backend/login
。
2. **
:匹配多层路径
-
**
匹配零个或多个路径部分,适用于路径的任意深度。它可以匹配路径中的任意层级。 -
**
可以放在路径的两端或中间。 -
示例:
/backend/**
可以匹配/backend/login
、/backend/page/login
、/backend/page/other/login
等任意深度的路径。/backend/**/login
可以匹配/backend/page/login
、/backend/user/login
、/backend/page/other/login
等路径。/backend/**/login/**
可以匹配/backend/page/login/abc
、/backend/page/other/login/abc/xyz
等路径。
3. ?
:匹配一个字符
-
?
用于匹配路径中的一个字符,表示任意单个字符(但不能是路径分隔符/
)。 -
示例:
/backend/??/login
可以匹配/backend/xx/login
、/backend/ab/login
,但是不能匹配/backend/xxx/login
。
4. 普通字符:
-
普通字符(如字母、数字、下划线等)会精确匹配相应的字符。
-
示例:
/backend/login
会精确匹配/backend/login
,不会匹配其他路径。
5. 路径分隔符 /
/
是路径的分隔符,路径模式中的/
必须严格匹配对应的路径分隔符。- 路径中的
/
表示层级的划分,通常一个路径段由/
连接多个部分。
6. 通配符的组合
*
和**
可以组合使用以适应更复杂的匹配需求。例如,/backend/*/user/**
可以匹配/backend/page/user/login
、/backend/other/user/profile
等路径。
匹配规则总结
*
:匹配一个路径部分(不含/
)。**
:匹配任意层级的路径。?
:匹配单个字符。- 普通字符:精确匹配路径字符。
具体示例
"/backend/**"
:匹配任何以/backend/
开头的路径,包括/backend/login
、/backend/page/login
、/backend/page/other/login
。"/backend/*/login"
:匹配/backend/xx/login
、/backend/ab/login
,但不能匹配/backend/page/login
。"/backend/**/login"
:匹配/backend/page/login
、/backend/user/login
、/backend/page/other/login
等路径。"/backend/??/login"
:匹配/backend/xx/login
,但不能匹配/backend/xxx/login
。"/backend/*/user/*"
:匹配/backend/page/user/login
、/backend/admin/user/profile
等路径。