Fix NPE in PrefixResourceResolver

The ResourceResolverChain can return null, so PrefixResourceResolver
should be skipped in that case.
master
Brian Clozel 11 years ago
parent c319b5fa82
commit 564a555619
  1. 12
      spring-webmvc/src/main/java/org/springframework/web/servlet/resource/PrefixResourceResolver.java

@ -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;
}
}

Loading…
Cancel
Save