Skip to content

Commit

Permalink
Rename max-http-post-size server property
Browse files Browse the repository at this point in the history
Rename `max-http-post-size` to `max-http-form-post-size` for Jetty and
Tomcat to make it clearer that they only apply to POSTed form content.

See spring-projectsgh-18566
  • Loading branch information
rhamedy authored and philwebb committed Oct 22, 2019
1 parent 63f60fc commit 81dc6e0
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 25 deletions.
Expand Up @@ -56,6 +56,7 @@
* @author Brian Clozel
* @author Olivier Lamy
* @author Chentao Qu
* @author Rafiullah Hamedy
* @since 1.0.0
*/
@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
Expand Down Expand Up @@ -335,14 +336,14 @@ public static class Tomcat {
private int minSpareThreads = 10;

/**
* Maximum size of the HTTP post content.
* Maximum size of the HTTP message header.
*/
private DataSize maxHttpPostSize = DataSize.ofMegabytes(2);
private DataSize maxHttpHeaderSize = DataSize.ofBytes(0);

/**
* Maximum size of the HTTP message header.
* Maximum size of the form content in any HTTP post request.
*/
private DataSize maxHttpHeaderSize = DataSize.ofBytes(0);
private DataSize maxHttpFormPostSize = DataSize.ofMegabytes(2);

/**
* Maximum amount of request body to swallow.
Expand Down Expand Up @@ -413,12 +414,23 @@ public void setMinSpareThreads(int minSpareThreads) {
this.minSpareThreads = minSpareThreads;
}

@Deprecated
@DeprecatedConfigurationProperty(replacement = "server.tomcat.max-http-form-post-size")
public DataSize getMaxHttpPostSize() {
return this.maxHttpPostSize;
return this.maxHttpFormPostSize;
}

@Deprecated
public void setMaxHttpPostSize(DataSize maxHttpPostSize) {
this.maxHttpPostSize = maxHttpPostSize;
this.maxHttpFormPostSize = maxHttpPostSize;
}

public DataSize getMaxHttpFormPostSize() {
return this.maxHttpFormPostSize;
}

public void setMaxHttpFormPostSize(DataSize maxHttpFormPostSize) {
this.maxHttpFormPostSize = maxHttpFormPostSize;
}

public Accesslog getAccesslog() {
Expand Down Expand Up @@ -746,9 +758,9 @@ public static class Jetty {
private final Accesslog accesslog = new Accesslog();

/**
* Maximum size of the HTTP post or put content.
* Maximum size of the form content in any HTTP post request.
*/
private DataSize maxHttpPostSize = DataSize.ofBytes(200000);
private DataSize maxHttpFormPostSize = DataSize.ofBytes(200000);

/**
* Number of acceptor threads to use. When the value is -1, the default, the
Expand All @@ -771,12 +783,23 @@ public Accesslog getAccesslog() {
return this.accesslog;
}

@Deprecated
@DeprecatedConfigurationProperty(replacement = "server.jetty.max-http-form-post-size")
public DataSize getMaxHttpPostSize() {
return this.maxHttpPostSize;
return this.maxHttpFormPostSize;
}

@Deprecated
public void setMaxHttpPostSize(DataSize maxHttpPostSize) {
this.maxHttpPostSize = maxHttpPostSize;
this.maxHttpFormPostSize = maxHttpPostSize;
}

public DataSize getMaxHttpFormPostSize() {
return this.maxHttpFormPostSize;
}

public void setMaxHttpFormPostSize(DataSize maxHttpFormPostSize) {
this.maxHttpFormPostSize = maxHttpFormPostSize;
}

public Integer getAcceptors() {
Expand Down
Expand Up @@ -44,6 +44,7 @@
*
* @author Brian Clozel
* @author Phillip Webb
* @author Rafiullah Hamedy
* @since 2.0.0
*/
public class JettyWebServerFactoryCustomizer
Expand Down Expand Up @@ -74,8 +75,8 @@ public void customize(ConfigurableJettyWebServerFactory factory) {
propertyMapper.from(properties::getMaxHttpHeaderSize).whenNonNull().asInt(DataSize::toBytes)
.when(this::isPositive).to((maxHttpHeaderSize) -> factory
.addServerCustomizers(new MaxHttpHeaderSizeCustomizer(maxHttpHeaderSize)));
propertyMapper.from(jettyProperties::getMaxHttpPostSize).asInt(DataSize::toBytes).when(this::isPositive)
.to((maxHttpPostSize) -> customizeMaxHttpPostSize(factory, maxHttpPostSize));
propertyMapper.from(jettyProperties::getMaxHttpFormPostSize).asInt(DataSize::toBytes).when(this::isPositive)
.to((maxHttpFormPostSize) -> customizeMaxHttpFormPostSize(factory, maxHttpFormPostSize));
propertyMapper.from(properties::getConnectionTimeout).whenNonNull()
.to((connectionTimeout) -> customizeIdleTimeout(factory, connectionTimeout));
propertyMapper.from(jettyProperties::getConnectionIdleTimeout).whenNonNull()
Expand Down Expand Up @@ -106,24 +107,24 @@ private void customizeIdleTimeout(ConfigurableJettyWebServerFactory factory, Dur
});
}

private void customizeMaxHttpPostSize(ConfigurableJettyWebServerFactory factory, int maxHttpPostSize) {
private void customizeMaxHttpFormPostSize(ConfigurableJettyWebServerFactory factory, int maxHttpFormPostSize) {
factory.addServerCustomizers(new JettyServerCustomizer() {

@Override
public void customize(Server server) {
setHandlerMaxHttpPostSize(maxHttpPostSize, server.getHandlers());
setHandlerMaxHttpFormPostSize(maxHttpFormPostSize, server.getHandlers());
}

private void setHandlerMaxHttpPostSize(int maxHttpPostSize, Handler... handlers) {
private void setHandlerMaxHttpFormPostSize(int maxHttpPostSize, Handler... handlers) {
for (Handler handler : handlers) {
if (handler instanceof ContextHandler) {
((ContextHandler) handler).setMaxFormContentSize(maxHttpPostSize);
((ContextHandler) handler).setMaxFormContentSize(maxHttpFormPostSize);
}
else if (handler instanceof HandlerWrapper) {
setHandlerMaxHttpPostSize(maxHttpPostSize, ((HandlerWrapper) handler).getHandler());
setHandlerMaxHttpFormPostSize(maxHttpFormPostSize, ((HandlerWrapper) handler).getHandler());
}
else if (handler instanceof HandlerCollection) {
setHandlerMaxHttpPostSize(maxHttpPostSize, ((HandlerCollection) handler).getHandlers());
setHandlerMaxHttpFormPostSize(maxHttpFormPostSize, ((HandlerCollection) handler).getHandlers());
}
}
}
Expand Down
Expand Up @@ -49,6 +49,7 @@
* @author Phillip Webb
* @author Artsiom Yudovin
* @author Chentao Qu
* @author Rafiullah Hamedy
* @since 2.0.0
*/
public class TomcatWebServerFactoryCustomizer
Expand Down Expand Up @@ -86,9 +87,9 @@ public void customize(ConfigurableTomcatWebServerFactory factory) {
.to((maxHttpHeaderSize) -> customizeMaxHttpHeaderSize(factory, maxHttpHeaderSize));
propertyMapper.from(tomcatProperties::getMaxSwallowSize).whenNonNull().asInt(DataSize::toBytes)
.to((maxSwallowSize) -> customizeMaxSwallowSize(factory, maxSwallowSize));
propertyMapper.from(tomcatProperties::getMaxHttpPostSize).asInt(DataSize::toBytes)
.when((maxHttpPostSize) -> maxHttpPostSize != 0)
.to((maxHttpPostSize) -> customizeMaxHttpPostSize(factory, maxHttpPostSize));
propertyMapper.from(tomcatProperties::getMaxHttpFormPostSize).asInt(DataSize::toBytes)
.when((maxHttpFormPostSize) -> maxHttpFormPostSize != 0)
.to((maxHttpFormPostSize) -> customizeMaxHttpFormPostSize(factory, maxHttpFormPostSize));
propertyMapper.from(tomcatProperties::getAccesslog).when(ServerProperties.Tomcat.Accesslog::isEnabled)
.to((enabled) -> customizeAccessLog(factory));
propertyMapper.from(tomcatProperties::getUriEncoding).whenNonNull().to(factory::setUriEncoding);
Expand Down Expand Up @@ -218,8 +219,8 @@ private void customizeMaxSwallowSize(ConfigurableTomcatWebServerFactory factory,
});
}

private void customizeMaxHttpPostSize(ConfigurableTomcatWebServerFactory factory, int maxHttpPostSize) {
factory.addConnectorCustomizers((connector) -> connector.setMaxPostSize(maxHttpPostSize));
private void customizeMaxHttpFormPostSize(ConfigurableTomcatWebServerFactory factory, int maxHttpFormPostSize) {
factory.addConnectorCustomizers((connector) -> connector.setMaxPostSize(maxHttpFormPostSize));
}

private void customizeAccessLog(ConfigurableTomcatWebServerFactory factory) {
Expand Down
Expand Up @@ -72,6 +72,7 @@
* @author Eddú Meléndez
* @author Quinten De Swaef
* @author Venil Noronha
* @author Rafiullah Hamedy
*/
public class ServerPropertiesTests {

Expand Down Expand Up @@ -219,6 +220,12 @@ public void tomcatMaxHttpPostSizeMatchesConnectorDefault() throws Exception {
.isEqualTo(getDefaultConnector().getMaxPostSize());
}

@Test
public void tomcatMaxHttpFormPostSizeMatchesConnectorDefault() throws Exception {
assertThat(this.properties.getTomcat().getMaxHttpFormPostSize().toBytes())
.isEqualTo(getDefaultConnector().getMaxPostSize());
}

@Test
public void tomcatBackgroundProcessorDelayMatchesEngineDefault() {
assertThat(this.properties.getTomcat().getBackgroundProcessorDelay())
Expand Down Expand Up @@ -256,7 +263,7 @@ public void tomcatInternalProxiesMatchesDefault() {
}

@Test
public void jettyMaxHttpPostSizeMatchesDefault() throws Exception {
public void jettyMaxHttpFormPostSizeMatchesDefault() throws Exception {
JettyServletWebServerFactory jettyFactory = new JettyServletWebServerFactory(0);
JettyWebServer jetty = (JettyWebServer) jettyFactory
.getWebServer((ServletContextInitializer) (servletContext) -> servletContext
Expand Down Expand Up @@ -308,7 +315,7 @@ public void handleError(ClientHttpResponse response) throws IOException {
assertThat(failure.get()).isNotNull();
String message = failure.get().getCause().getMessage();
int defaultMaxPostSize = Integer.valueOf(message.substring(message.lastIndexOf(' ')).trim());
assertThat(this.properties.getJetty().getMaxHttpPostSize().toBytes()).isEqualTo(defaultMaxPostSize);
assertThat(this.properties.getJetty().getMaxHttpFormPostSize().toBytes()).isEqualTo(defaultMaxPostSize);
}
finally {
jetty.stop();
Expand Down
Expand Up @@ -49,6 +49,7 @@
* @author Rob Tompkins
* @author Artsiom Yudovin
* @author Stephane Nicoll
* @author Rafiullah Hamedy
*/
public class TomcatWebServerFactoryCustomizerTests {

Expand Down Expand Up @@ -95,6 +96,12 @@ public void customDisableMaxHttpPostSize() {
customizeAndRunServer((server) -> assertThat(server.getTomcat().getConnector().getMaxPostSize()).isEqualTo(-1));
}

@Test
public void customDisableMaxHttpFormPostSize() {
bind("server.tomcat.max-http-form-post-size=-1");
customizeAndRunServer((server) -> assertThat(server.getTomcat().getConnector().getMaxPostSize()).isEqualTo(-1));
}

@Test
public void customMaxConnections() {
bind("server.tomcat.max-connections=5");
Expand All @@ -110,6 +117,13 @@ public void customMaxHttpPostSize() {
(server) -> assertThat(server.getTomcat().getConnector().getMaxPostSize()).isEqualTo(10000));
}

@Test
public void customMaxHttpFormPostSize() {
bind("server.tomcat.max-http-form-post-size=10000");
customizeAndRunServer(
(server) -> assertThat(server.getTomcat().getConnector().getMaxPostSize()).isEqualTo(10000));
}

@Test
public void customMaxHttpHeaderSize() {
bind("server.max-http-header-size=1KB");
Expand Down

0 comments on commit 81dc6e0

Please sign in to comment.