提交 f53d01b0 编写于 作者: B Brian Clozel 提交者: Juergen Hoeller

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
(cherry picked from commit c2267539)
上级 b3eefa2a
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -100,7 +100,13 @@ public abstract class AbstractVersionStrategy implements VersionStrategy {
@Override
public String addVersion(String path, String version) {
return (this.prefix.endsWith("/") || path.startsWith("/") ? this.prefix + path : this.prefix + "/" + path);
if (path.startsWith(".")) {
return path;
}
else {
return (this.prefix.endsWith("/") || path.startsWith("/") ?
this.prefix + path : this.prefix + "/" + path);
}
}
}
......@@ -118,7 +124,7 @@ public abstract class AbstractVersionStrategy implements VersionStrategy {
Matcher matcher = pattern.matcher(requestPath);
if (matcher.find()) {
String match = matcher.group(1);
return match.contains("-") ? match.substring(match.lastIndexOf("-") + 1) : match;
return (match.contains("-") ? match.substring(match.lastIndexOf("-") + 1) : match);
}
else {
return null;
......@@ -134,7 +140,7 @@ public abstract class AbstractVersionStrategy implements VersionStrategy {
public String addVersion(String requestPath, String version) {
String baseFilename = StringUtils.stripFilenameExtension(requestPath);
String extension = StringUtils.getFilenameExtension(requestPath);
return baseFilename + "-" + version + "." + extension;
return (baseFilename + "-" + version + "." + extension);
}
}
......
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
......@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.web.servlet.resource;
import org.junit.Before;
......@@ -21,7 +22,8 @@ import org.junit.Test;
import static org.junit.Assert.*;
/**
* Unit tests for {@link org.springframework.web.servlet.resource.FixedVersionStrategy}
* Unit tests for {@link org.springframework.web.servlet.resource.FixedVersionStrategy}.
*
* @author Brian Clozel
*/
public class FixedVersionStrategyTests {
......@@ -57,7 +59,13 @@ 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));
}
@Test // SPR-13727
public void addVersionRelativePath() throws Exception {
String relativePath = "../" + this.path;
assertEquals(relativePath, this.strategy.addVersion(relativePath, this.version));
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册