Consistently handle match with '*' and trailing slash
Prior to this commit, the `AntPathMatcher` would inconsistently match pattern with trailing slashes if they contain `"**"` within their pattern. For example `"/en/test/"` would match `"/**/test"`, but it would not match `"/*/test"` (as it should). This commit fixes this behavior for better consistency. Fixes gh-27506
This commit is contained in:
parent
1776f08bfe
commit
705bf78104
|
|
@ -275,6 +275,10 @@ public class AntPathMatcher implements PathMatcher {
|
|||
if (!matchStrings(pattDir, pathDirs[pathIdxEnd], uriTemplateVariables)) {
|
||||
return false;
|
||||
}
|
||||
if (pattIdxEnd == (pattDirs.length - 1)
|
||||
&& pattern.endsWith(this.pathSeparator) != path.endsWith(this.pathSeparator)) {
|
||||
return false;
|
||||
}
|
||||
pattIdxEnd--;
|
||||
pathIdxEnd--;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -704,4 +704,11 @@ class AntPathMatcherTests {
|
|||
assertThat(pathMatcher.isPattern(null)).isFalse();
|
||||
}
|
||||
|
||||
@Test // gh-27506
|
||||
void consistentMatchWithWildcardsAndTrailingSlash() {
|
||||
assertThat(pathMatcher.match("/*/foo", "/en/foo")).isTrue();
|
||||
assertThat(pathMatcher.match("/*/foo", "/en/foo/")).isFalse();
|
||||
assertThat(pathMatcher.match("/**/foo", "/en/foo")).isTrue();
|
||||
assertThat(pathMatcher.match("/**/foo", "/en/foo/")).isFalse();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue