spring-cloud-netflix
spring-cloud-netflix copied to clipboard
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.