Add configuration key for GzipResourceResolver
This commit adds a new key that configures a GzipResourceResolver in the resource handling chain. Configuring an application with the following will add that resolver, which checks for gzipped resources in the configured locations: ``` spring.resources.chain.gzipped=true ``` This means that if a resource "style.css" is requested, the GzipResourceResolver will look for resources named "style.css.gz", which should be a gzipped variant of the "style.css" file. Note that this resolver only checks for variants if the client supports the "gzip" encoding, as defined in the "Accept-Encoding" HTTP request headers. Fixes #4683
This commit is contained in:
parent
4189e145bb
commit
4ca04abcb2
|
@ -169,6 +169,12 @@ public class ResourceProperties implements ResourceLoaderAware {
|
|||
*/
|
||||
private boolean htmlApplicationCache = false;
|
||||
|
||||
/**
|
||||
* Enable resolution of already gzipped resources. Checks for a resource
|
||||
* name variant with the *.gz extension.
|
||||
*/
|
||||
private boolean gzipped = false;
|
||||
|
||||
@NestedConfigurationProperty
|
||||
private final Strategy strategy = new Strategy();
|
||||
|
||||
|
@ -208,6 +214,13 @@ public class ResourceProperties implements ResourceLoaderAware {
|
|||
this.htmlApplicationCache = htmlApplicationCache;
|
||||
}
|
||||
|
||||
public boolean isGzipped() {
|
||||
return this.gzipped;
|
||||
}
|
||||
|
||||
public void setGzipped(boolean gzipped) {
|
||||
this.gzipped = gzipped;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -85,6 +85,7 @@ import org.springframework.web.servlet.i18n.FixedLocaleResolver;
|
|||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
|
||||
import org.springframework.web.servlet.resource.AppCacheManifestTransformer;
|
||||
import org.springframework.web.servlet.resource.GzipResourceResolver;
|
||||
import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
|
||||
import org.springframework.web.servlet.resource.ResourceResolver;
|
||||
import org.springframework.web.servlet.resource.VersionResourceResolver;
|
||||
|
@ -396,6 +397,9 @@ public class WebMvcAutoConfiguration {
|
|||
if (strategy.getFixed().isEnabled() || strategy.getContent().isEnabled()) {
|
||||
chain.addResolver(getVersionResourceResolver(strategy));
|
||||
}
|
||||
if (properties.isGzipped()) {
|
||||
chain.addResolver(new GzipResourceResolver());
|
||||
}
|
||||
if (properties.isHtmlApplicationCache()) {
|
||||
chain.addTransformer(new AppCacheManifestTransformer());
|
||||
}
|
||||
|
|
|
@ -71,6 +71,7 @@ import org.springframework.web.servlet.resource.CachingResourceTransformer;
|
|||
import org.springframework.web.servlet.resource.ContentVersionStrategy;
|
||||
import org.springframework.web.servlet.resource.CssLinkResourceTransformer;
|
||||
import org.springframework.web.servlet.resource.FixedVersionStrategy;
|
||||
import org.springframework.web.servlet.resource.GzipResourceResolver;
|
||||
import org.springframework.web.servlet.resource.PathResourceResolver;
|
||||
import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
|
||||
import org.springframework.web.servlet.resource.ResourceResolver;
|
||||
|
@ -228,11 +229,13 @@ public class WebMvcAutoConfigurationTests {
|
|||
"spring.resources.chain.strategy.fixed.enabled:true",
|
||||
"spring.resources.chain.strategy.fixed.version:test",
|
||||
"spring.resources.chain.strategy.fixed.paths:/**/*.js",
|
||||
"spring.resources.chain.html-application-cache:true");
|
||||
assertThat(getResourceResolvers("/webjars/**")).hasSize(2);
|
||||
"spring.resources.chain.html-application-cache:true",
|
||||
"spring.resources.chain.gzipped:true");
|
||||
assertThat(getResourceResolvers("/webjars/**")).hasSize(3);
|
||||
assertThat(getResourceTransformers("/webjars/**")).hasSize(2);
|
||||
assertThat(getResourceResolvers("/**")).extractingResultOf("getClass")
|
||||
.containsOnly(VersionResourceResolver.class, PathResourceResolver.class);
|
||||
.containsOnly(VersionResourceResolver.class, GzipResourceResolver.class,
|
||||
PathResourceResolver.class);
|
||||
assertThat(getResourceTransformers("/**")).extractingResultOf("getClass")
|
||||
.containsOnly(CssLinkResourceTransformer.class,
|
||||
AppCacheManifestTransformer.class);
|
||||
|
|
Loading…
Reference in New Issue