Polish "Add configuration for Tomcat's cachingAllowed property"
Closes gh-13614
This commit is contained in:
@@ -52,7 +52,6 @@ import org.springframework.util.StringUtils;
|
||||
* @author Aurélien Leboulanger
|
||||
* @author Brian Clozel
|
||||
* @author Olivier Lamy
|
||||
* @author Rob Tompkins
|
||||
*/
|
||||
@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
|
||||
public class ServerProperties {
|
||||
@@ -266,11 +265,6 @@ public class ServerProperties {
|
||||
*/
|
||||
private final Accesslog accesslog = new Accesslog();
|
||||
|
||||
/**
|
||||
* Web resource configuration.
|
||||
*/
|
||||
private final WebResource webResource = new WebResource();
|
||||
|
||||
/**
|
||||
* Regular expression matching trusted IP addresses.
|
||||
*/
|
||||
@@ -405,10 +399,6 @@ public class ServerProperties {
|
||||
return this.accesslog;
|
||||
}
|
||||
|
||||
public WebResource getWebResource() {
|
||||
return this.webResource;
|
||||
}
|
||||
|
||||
public Duration getBackgroundProcessorDelay() {
|
||||
return this.backgroundProcessorDelay;
|
||||
}
|
||||
@@ -525,26 +515,6 @@ public class ServerProperties {
|
||||
return this.resource;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tomcat web resource properties.
|
||||
*/
|
||||
public static class WebResource {
|
||||
|
||||
/**
|
||||
* Whether tomcat WebResource caching is permitted for this web application.
|
||||
*/
|
||||
private Boolean useCaching = Boolean.TRUE;
|
||||
|
||||
public Boolean getUseCaching() {
|
||||
return this.useCaching;
|
||||
}
|
||||
|
||||
public void setUseCaching(Boolean useCaching) {
|
||||
this.useCaching = useCaching;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Tomcat access log properties.
|
||||
*/
|
||||
@@ -690,11 +660,24 @@ public class ServerProperties {
|
||||
*/
|
||||
public static class Resource {
|
||||
|
||||
/**
|
||||
* Whether static resource caching is permitted for this web application.
|
||||
*/
|
||||
private boolean allowCaching = true;
|
||||
|
||||
/**
|
||||
* Time-to-live of the static resource cache.
|
||||
*/
|
||||
private Duration cacheTtl;
|
||||
|
||||
public boolean isAllowCaching() {
|
||||
return this.allowCaching;
|
||||
}
|
||||
|
||||
public void setAllowCaching(boolean allowCaching) {
|
||||
this.allowCaching = allowCaching;
|
||||
}
|
||||
|
||||
public Duration getCacheTtl() {
|
||||
return this.cacheTtl;
|
||||
}
|
||||
|
||||
@@ -19,11 +19,9 @@ package org.springframework.boot.autoconfigure.web.embedded;
|
||||
import java.time.Duration;
|
||||
|
||||
import org.apache.catalina.Lifecycle;
|
||||
import org.apache.catalina.WebResourceRoot;
|
||||
import org.apache.catalina.valves.AccessLogValve;
|
||||
import org.apache.catalina.valves.ErrorReportValve;
|
||||
import org.apache.catalina.valves.RemoteIpValve;
|
||||
import org.apache.catalina.webresources.StandardRoot;
|
||||
import org.apache.coyote.AbstractProtocol;
|
||||
import org.apache.coyote.ProtocolHandler;
|
||||
import org.apache.coyote.http11.AbstractHttp11Protocol;
|
||||
@@ -48,7 +46,6 @@ import org.springframework.util.StringUtils;
|
||||
* @author Yulin Qin
|
||||
* @author Stephane Nicoll
|
||||
* @author Phillip Webb
|
||||
* @author Rob Tompkins
|
||||
* @since 2.0.0
|
||||
*/
|
||||
public class TomcatWebServerFactoryCustomizer implements
|
||||
@@ -73,8 +70,6 @@ public class TomcatWebServerFactoryCustomizer implements
|
||||
public void customize(ConfigurableTomcatWebServerFactory factory) {
|
||||
ServerProperties properties = this.serverProperties;
|
||||
ServerProperties.Tomcat tomcatProperties = properties.getTomcat();
|
||||
ServerProperties.Tomcat.WebResource tomcatWebResourceProperties = tomcatProperties
|
||||
.getWebResource();
|
||||
PropertyMapper propertyMapper = PropertyMapper.get();
|
||||
propertyMapper.from(tomcatProperties::getBasedir).whenNonNull()
|
||||
.to(factory::setBaseDirectory);
|
||||
@@ -106,9 +101,6 @@ public class TomcatWebServerFactoryCustomizer implements
|
||||
.to((maxConnections) -> customizeMaxConnections(factory, maxConnections));
|
||||
propertyMapper.from(tomcatProperties::getAcceptCount).when(this::isPositive)
|
||||
.to((acceptCount) -> customizeAcceptCount(factory, acceptCount));
|
||||
propertyMapper.from(tomcatWebResourceProperties::getUseCaching).whenFalse()
|
||||
.to((isWebResourceCachingAllowed) -> customizeWebResourceCaching(factory,
|
||||
isWebResourceCachingAllowed));
|
||||
customizeStaticResources(factory);
|
||||
customizeErrorReportValve(properties.getError(), factory);
|
||||
}
|
||||
@@ -134,18 +126,6 @@ public class TomcatWebServerFactoryCustomizer implements
|
||||
});
|
||||
}
|
||||
|
||||
private void customizeWebResourceCaching(ConfigurableTomcatWebServerFactory factory,
|
||||
Boolean useWebResourceCaching) {
|
||||
factory.addContextCustomizers((context) -> {
|
||||
WebResourceRoot webResourceRoot = context.getResources();
|
||||
if (webResourceRoot == null) {
|
||||
webResourceRoot = new StandardRoot(context);
|
||||
}
|
||||
webResourceRoot.setCachingAllowed(useWebResourceCaching);
|
||||
context.setResources(webResourceRoot);
|
||||
});
|
||||
}
|
||||
|
||||
private void customizeMaxConnections(ConfigurableTomcatWebServerFactory factory,
|
||||
int maxConnections) {
|
||||
factory.addConnectorCustomizers((connector) -> {
|
||||
@@ -261,14 +241,14 @@ public class TomcatWebServerFactoryCustomizer implements
|
||||
private void customizeStaticResources(ConfigurableTomcatWebServerFactory factory) {
|
||||
ServerProperties.Tomcat.Resource resource = this.serverProperties.getTomcat()
|
||||
.getResource();
|
||||
if (resource.getCacheTtl() == null) {
|
||||
return;
|
||||
}
|
||||
factory.addContextCustomizers((context) -> {
|
||||
context.addLifecycleListener((event) -> {
|
||||
if (event.getType().equals(Lifecycle.CONFIGURE_START_EVENT)) {
|
||||
long ttl = resource.getCacheTtl().toMillis();
|
||||
context.getResources().setCacheTtl(ttl);
|
||||
context.getResources().setCachingAllowed(resource.isAllowCaching());
|
||||
if (resource.getCacheTtl() != null) {
|
||||
long ttl = resource.getCacheTtl().toMillis();
|
||||
context.getResources().setCacheTtl(ttl);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -99,20 +99,6 @@ public class TomcatWebServerFactoryCustomizerTests {
|
||||
.isEqualTo(5));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void turnOffWebResourceCaching() {
|
||||
bind("server.tomcat.webresource.use-caching=false");
|
||||
customizeAndRunServer((server) -> {
|
||||
Mapper mapper = server.getTomcat().getService().getMapper();
|
||||
Object contextObjectToContextVersionMap = ReflectionTestUtils.getField(mapper,
|
||||
"contextObjectToContextVersionMap");
|
||||
Object tomcatEmbeddedContext = ((Map<Context, Object>) contextObjectToContextVersionMap)
|
||||
.values().toArray()[0];
|
||||
assertThat(((StandardRoot) ReflectionTestUtils.getField(tomcatEmbeddedContext,
|
||||
"resources")).isCachingAllowed()).isFalse();
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customMaxHttpPostSize() {
|
||||
bind("server.tomcat.max-http-post-size=10000");
|
||||
@@ -140,6 +126,20 @@ public class TomcatWebServerFactoryCustomizerTests {
|
||||
assertThat(remoteIpValve.getInternalProxies()).isEqualTo("192.168.0.1");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customStaticResourceAllowCaching() {
|
||||
bind("server.tomcat.resource.allow-caching=false");
|
||||
customizeAndRunServer((server) -> {
|
||||
Mapper mapper = server.getTomcat().getService().getMapper();
|
||||
Object contextObjectToContextVersionMap = ReflectionTestUtils.getField(mapper,
|
||||
"contextObjectToContextVersionMap");
|
||||
Object tomcatEmbeddedContext = ((Map<Context, Object>) contextObjectToContextVersionMap)
|
||||
.values().toArray()[0];
|
||||
assertThat(((StandardRoot) ReflectionTestUtils.getField(tomcatEmbeddedContext,
|
||||
"resources")).isCachingAllowed()).isFalse();
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customStaticResourceCacheTtl() {
|
||||
bind("server.tomcat.resource.cache-ttl=10000");
|
||||
|
||||
Reference in New Issue
Block a user