Update ZuulHandlerMapping to use PathMatcher
Zuul ignored patterns have inconsistent behaviour on edge cases
fixes gh-1575
Current coverage is 74.13% (diff: 0.00%)
@@ master #1576 diff @@
==========================================
Files 193 193
Lines 5937 5939 +2
Methods 0 0
Messages 0 0
Branches 893 894 +1
==========================================
- Hits 4407 4403 -4
- Misses 1206 1212 +6
Partials 324 324
Powered by Codecov. Last update 1cd194a...e1e61b5
Sorry, can't see any logical test fitting in for this fix.
The problem is that values from the same object (ZuulProperties.ignoredPatterns) and whithin the same flow are being checked against two different implementations (probably inadvertently) which are clearly not 100% compatible (PatternMatchUtils.simpleMatch vs AntPathMatcher.match) as one is pure wildcard and the other has embedded path logic.
If you are looking for some cases where the used implementations fail to match, please check below:
PATTERN '/*'
'/p1/' AntPathMatcher=false; MatchUtils=true
'/p1/p2' AntPathMatcher=false; MatchUtils=true
'/p1/p2/' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/p4' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/p4/' AntPathMatcher=false; MatchUtils=true
PATTERN '/p1*'
'/p1/' AntPathMatcher=false; MatchUtils=true
'/p1/p2' AntPathMatcher=false; MatchUtils=true
'/p1/p2/' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/p4' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/p4/' AntPathMatcher=false; MatchUtils=true
PATTERN '/p1/*'
'/p1/p2/' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/p4' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/p4/' AntPathMatcher=false; MatchUtils=true
PATTERN '/p1/**'
'/p1' AntPathMatcher=true; MatchUtils=false
PATTERN '/p*'
'/p1/' AntPathMatcher=false; MatchUtils=true
'/p1/p2' AntPathMatcher=false; MatchUtils=true
'/p1/p2/' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/p4' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/p4/' AntPathMatcher=false; MatchUtils=true
PATTERN '/p1/*/p3*'
'/p1/p2/p3/' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/p4' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/p4/' AntPathMatcher=false; MatchUtils=true
PATTERN '/p1/*/p3**'
'/p1/p2/p3/' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/p4' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/p4/' AntPathMatcher=false; MatchUtils=true
PATTERN '/p1/*/p3/*'
'/p1/p2/p3/p4/' AntPathMatcher=false; MatchUtils=true
PATTERN '/p1/*/p3/**'
'/p1/p2/p3' AntPathMatcher=true; MatchUtils=false
PATTERN '/p1/**/p3'
'/p1/p2/p3/' AntPathMatcher=true; MatchUtils=false
PATTERN '/p1/**/p3*'
'/p1/p2/p3/p4' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/p4/' AntPathMatcher=false; MatchUtils=true
PATTERN '/p1/**/p3**'
'/p1/p2/p3/p4' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/p4/' AntPathMatcher=false; MatchUtils=true
PATTERN '/p1/**/p3/'
'/p1/p2/p3' AntPathMatcher=true; MatchUtils=false
PATTERN '/p1/**/p3/*'
'/p1/p2/p3/' AntPathMatcher=false; MatchUtils=true
PATTERN '/p1/**/p3/**'
'/p1/p2/p3' AntPathMatcher=true; MatchUtils=false
PATTERN '/p1/*/p4'
'/p1/p2/p3/p4' AntPathMatcher=false; MatchUtils=true
PATTERN '/p1/*/p4*'
'/p1/p2/p3/p4' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/p4/' AntPathMatcher=false; MatchUtils=true
PATTERN '/p1/*/p4**'
'/p1/p2/p3/p4' AntPathMatcher=false; MatchUtils=true
'/p1/p2/p3/p4/' AntPathMatcher=false; MatchUtils=true
PATTERN '/p1/*/p4/'
'/p1/p2/p3/p4/' AntPathMatcher=false; MatchUtils=true
PATTERN '/p1/*/p4/*'
'/p1/p2/p3/p4/' AntPathMatcher=false; MatchUtils=true
PATTERN '/p1/*/p4/**'
'/p1/p2/p3/p4/' AntPathMatcher=false; MatchUtils=true
PATTERN '/p1/**/p4'
'/p1/p2/p3/p4/' AntPathMatcher=true; MatchUtils=false
PATTERN '/p1/**/p4/'
'/p1/p2/p3/p4' AntPathMatcher=true; MatchUtils=false
PATTERN '/p1/**/p4/*'
'/p1/p2/p3/p4/' AntPathMatcher=false; MatchUtils=true
PATTERN '/p1/**/p4/**'
'/p1/p2/p3/p4' AntPathMatcher=true; MatchUtils=false
Thanks
rebuilding
I'm hesitant to make a change like this without a test. If you can't come up with one, I'll take a look later.
This module has entered maintenance mode. This means that the Spring Cloud team will no longer be adding new features to the module.