Browse Source

Avoid duplicate resources in PathMatchingResourcePatternResolver on Windows

This commit updates PathMatchingResourcePatternResolver to avoid
returning duplicate resources on MS Windows when searching using the
`classpath*:` prefix and a wildcard pattern that matches resources
which are directly present in a JAR as well as present via classpath
manifest entries.

Closes gh-31598
6.0.x
Jason 10 months ago committed by Sam Brannen
parent
commit
d5874ab99e
  1. 3
      spring-core/src/main/java/org/springframework/core/io/support/PathMatchingResourcePatternResolver.java

3
spring-core/src/main/java/org/springframework/core/io/support/PathMatchingResourcePatternResolver.java

@ -491,7 +491,8 @@ public class PathMatchingResourcePatternResolver implements ResourcePatternResol
int prefixIndex = filePath.indexOf(':'); int prefixIndex = filePath.indexOf(':');
if (prefixIndex == 1) { if (prefixIndex == 1) {
// Possibly "c:" drive prefix on Windows, to be upper-cased for proper duplicate detection // Possibly "c:" drive prefix on Windows, to be upper-cased for proper duplicate detection
filePath = StringUtils.capitalize(filePath); // to resolve find duplicate jar resource on windows
filePath = "/" + StringUtils.capitalize(filePath);
} }
// Since '#' can appear in directories/filenames, java.net.URL should not treat it as a fragment // Since '#' can appear in directories/filenames, java.net.URL should not treat it as a fragment
filePath = StringUtils.replace(filePath, "#", "%23"); filePath = StringUtils.replace(filePath, "#", "%23");

Loading…
Cancel
Save