Fix NPE in PrefixResourceResolver

The ResourceResolverChain can return null, so PrefixResourceResolver
should be skipped in that case.
This commit is contained in:
Brian Clozel
2014-04-25 15:15:53 +02:00
parent c319b5fa82
commit 564a555619

View File

@@ -20,6 +20,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.io.Resource;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@@ -43,11 +44,8 @@ import java.util.List;
*/
public class PrefixResourceResolver extends AbstractResourceResolver {
private static final Log logger = LogFactory.getLog(PathResourceResolver.class);
private final String prefix;
public PrefixResourceResolver(String prefix) {
Assert.hasText(prefix, "prefix must not be null or empty");
this.prefix = prefix.startsWith("/") ? prefix.substring(1) : prefix;
@@ -57,9 +55,6 @@ public class PrefixResourceResolver extends AbstractResourceResolver {
protected Resource resolveResourceInternal(HttpServletRequest request, String requestPath,
List<? extends Resource> locations, ResourceResolverChain chain) {
if (logger.isTraceEnabled()) {
logger.trace("Resolving resource: requestPath=\"" + requestPath + "\"");
}
if (requestPath.startsWith(this.prefix)) {
requestPath = requestPath.substring(this.prefix.length());
}
@@ -72,7 +67,10 @@ public class PrefixResourceResolver extends AbstractResourceResolver {
ResourceResolverChain chain) {
String baseUrl = chain.resolvePublicUrlPath(resourceUrlPath, locations);
return this.prefix + (baseUrl.startsWith("/") ? baseUrl : "/" + baseUrl);
if (StringUtils.hasText(baseUrl)) {
return this.prefix + (baseUrl.startsWith("/") ? baseUrl : "/" + baseUrl);
}
return baseUrl;
}
}