Fix absolute paths when transforming resources

Prior to this commit, `ResourceTransformerSupport.toAbsolutePath`
would call `StringUtils.applyRelativePath` in all cases. But this
implementation is prepending the given path even if the relative path
starts with `"/"`.

This commit skips the entire operation if the given path is absolute,
i.e. it starts with `"/"`.

Issue: SPR-17432
This commit is contained in:
Brian Clozel
2018-10-25 14:44:45 +02:00
parent a61d107606
commit 2146e13787
4 changed files with 30 additions and 6 deletions

View File

@@ -94,10 +94,13 @@ public abstract class ResourceTransformerSupport implements ResourceTransformer
* @return the absolute request path for the given resource path
*/
protected String toAbsolutePath(String path, HttpServletRequest request) {
ResourceUrlProvider urlProvider = findResourceUrlProvider(request);
Assert.state(urlProvider != null, "No ResourceUrlProvider");
String requestPath = urlProvider.getUrlPathHelper().getRequestUri(request);
String absolutePath = StringUtils.applyRelativePath(requestPath, path);
String absolutePath = path;
if(!path.startsWith("/")) {
ResourceUrlProvider urlProvider = findResourceUrlProvider(request);
Assert.state(urlProvider != null, "No ResourceUrlProvider");
String requestPath = urlProvider.getUrlPathHelper().getRequestUri(request);
absolutePath = StringUtils.applyRelativePath(requestPath, path);
}
return StringUtils.cleanPath(absolutePath);
}