diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/PathContainer.java b/spring-web/src/main/java/org/springframework/http/server/reactive/PathContainer.java index 795ef4434f2..c6d00dc4ebb 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/PathContainer.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/PathContainer.java @@ -60,7 +60,19 @@ public interface PathContainer { * @return the sub-path */ static PathContainer subPath(PathContainer path, int index) { - return DefaultPathContainer.subPath(path, index, path.elements().size()); + return subPath(path, index, path.elements().size()); + } + + /** + * Extract a sub-path from the given start offset (inclusive) into the path + * element list and to the end offset (exclusive). + * @param path the path to extract from + * @param startIndex the start element index (inclusive) + * @param endIndex the end element index (exclusive) + * @return the sub-path + */ + static PathContainer subPath(PathContainer path, int startIndex, int endIndex) { + return DefaultPathContainer.subPath(path, startIndex, endIndex); } diff --git a/spring-web/src/main/java/org/springframework/web/cors/reactive/UrlBasedCorsConfigurationSource.java b/spring-web/src/main/java/org/springframework/web/cors/reactive/UrlBasedCorsConfigurationSource.java index 68db63fa709..11422041cc8 100644 --- a/spring-web/src/main/java/org/springframework/web/cors/reactive/UrlBasedCorsConfigurationSource.java +++ b/spring-web/src/main/java/org/springframework/web/cors/reactive/UrlBasedCorsConfigurationSource.java @@ -19,6 +19,7 @@ package org.springframework.web.cors.reactive; import java.util.LinkedHashMap; import java.util.Map; +import org.springframework.http.server.reactive.PathContainer; import org.springframework.lang.Nullable; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.server.ServerWebExchange; @@ -66,10 +67,10 @@ public class UrlBasedCorsConfigurationSource implements CorsConfigurationSource @Override public CorsConfiguration getCorsConfiguration(ServerWebExchange exchange) { - String lookupPath = exchange.getRequest().getPath().pathWithinApplication().value(); + PathContainer lookupPath = exchange.getRequest().getPath().pathWithinApplication(); return this.corsConfigurations.entrySet().stream() .filter(entry -> entry.getKey().matches(lookupPath)) - .map(entry -> entry.getValue()) + .map(Map.Entry::getValue) .findFirst() .orElse(null); } diff --git a/spring-web/src/main/java/org/springframework/web/util/pattern/ParsingPathMatcher.java b/spring-web/src/main/java/org/springframework/web/util/pattern/ParsingPathMatcher.java index 0440b8c242d..f044888091f 100644 --- a/spring-web/src/main/java/org/springframework/web/util/pattern/ParsingPathMatcher.java +++ b/spring-web/src/main/java/org/springframework/web/util/pattern/ParsingPathMatcher.java @@ -73,7 +73,8 @@ public class ParsingPathMatcher implements PathMatcher { @Override public String extractPathWithinPattern(String pattern, String path) { PathPattern pathPattern = getPathPattern(pattern); - return pathPattern.extractPathWithinPattern(path); + PathContainer pathContainer = PathContainer.parse(path, StandardCharsets.UTF_8); + return pathPattern.extractPathWithinPattern(pathContainer).value(); } @Override diff --git a/spring-web/src/main/java/org/springframework/web/util/pattern/PathPattern.java b/spring-web/src/main/java/org/springframework/web/util/pattern/PathPattern.java index a3babd99b6a..2a86dac8e82 100644 --- a/spring-web/src/main/java/org/springframework/web/util/pattern/PathPattern.java +++ b/spring-web/src/main/java/org/springframework/web/util/pattern/PathPattern.java @@ -158,22 +158,6 @@ public class PathPattern implements Comparable { } - // TODO: remove String-variants - - public boolean matches(String path) { - return matches(PathContainer.parse(path, StandardCharsets.UTF_8)); - } - - public PathMatchResult matchAndExtract(String path) { - return matchAndExtract(PathContainer.parse(path, StandardCharsets.UTF_8)); - } - - @Nullable - public PathRemainingMatchInfo getPathRemaining(String path) { - return getPathRemaining(PathContainer.parse(path, StandardCharsets.UTF_8)); - } - - /** * @param pathContainer the candidate path container to attempt to match against this pattern * @return true if the path matches this pattern @@ -262,13 +246,6 @@ public class PathPattern implements Comparable { } } - // TODO: implement extractPathWithinPattern natively for PathContainer - - public PathContainer extractPathWithinPattern(PathContainer path) { - String result = extractPathWithinPattern(path.value()); - return PathContainer.parse(result, StandardCharsets.UTF_8); - } - /** * Given a full path, determine the pattern-mapped part.

For example: