Browse Source

Do not rewrite relative links with FixedVersionStrategy

Prior to this change, the resource handling FixedVersionStrategy would
be applied on all links that match the configured pattern. This is
problematic for relative links and can lead to rewritten links such as
"/fixedversion/../css/main.css" which breaks.

This commit prevents that Strategy from being applied to such links.
Of course, one should avoid to use that VersionStrategy with relative
links, but this change aims at not breaking existing links even if it
means not prefixing the version as expected.

Issue: SPR-13727
pull/928/merge
Brian Clozel 10 years ago
parent
commit
c226753985
  1. 5
      spring-webmvc/src/main/java/org/springframework/web/servlet/resource/AbstractVersionStrategy.java
  2. 9
      spring-webmvc/src/test/java/org/springframework/web/servlet/resource/FixedVersionStrategyTests.java

5
spring-webmvc/src/main/java/org/springframework/web/servlet/resource/AbstractVersionStrategy.java

@ -100,9 +100,14 @@ public abstract class AbstractVersionStrategy implements VersionStrategy { @@ -100,9 +100,14 @@ public abstract class AbstractVersionStrategy implements VersionStrategy {
@Override
public String addVersion(String path, String version) {
if(path.startsWith(".")) {
return path;
}
else {
return (this.prefix.endsWith("/") || path.startsWith("/") ? this.prefix + path : this.prefix + "/" + path);
}
}
}
/**

9
spring-webmvc/src/test/java/org/springframework/web/servlet/resource/FixedVersionStrategyTests.java

@ -57,7 +57,14 @@ public class FixedVersionStrategyTests { @@ -57,7 +57,14 @@ public class FixedVersionStrategyTests {
@Test
public void addVersion() throws Exception {
assertEquals(this.version + "/" + this.path, this.strategy.addVersion(this.path, this.version));
assertEquals(this.version + "/" + this.path, this.strategy.addVersion("/" + this.path, this.version));
}
// SPR-13727
@Test
public void addVersionRelativePath() throws Exception {
String relativePath = "../" + this.path;
assertEquals(relativePath, this.strategy.addVersion(relativePath, this.version));
}
}

Loading…
Cancel
Save