From 81dc6e02e6c942bd960ce317219b24c4af501d19 Mon Sep 17 00:00:00 2001 From: Rafiullah Hamedy Date: Sat, 12 Oct 2019 12:33:01 -0400 Subject: [PATCH] Rename `max-http-post-size` server property 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 gh-18566 --- .../autoconfigure/web/ServerProperties.java | 43 ++++++++++++++----- .../JettyWebServerFactoryCustomizer.java | 17 ++++---- .../TomcatWebServerFactoryCustomizer.java | 11 ++--- .../web/ServerPropertiesTests.java | 11 ++++- ...TomcatWebServerFactoryCustomizerTests.java | 14 ++++++ 5 files changed, 71 insertions(+), 25 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java index 6e3144ffe316..b13485ad15b7 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java @@ -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) @@ -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. @@ -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() { @@ -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 @@ -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() { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizer.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizer.java index 3b230f210ed8..35270b85e994 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizer.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizer.java @@ -44,6 +44,7 @@ * * @author Brian Clozel * @author Phillip Webb + * @author Rafiullah Hamedy * @since 2.0.0 */ public class JettyWebServerFactoryCustomizer @@ -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() @@ -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()); } } } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/TomcatWebServerFactoryCustomizer.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/TomcatWebServerFactoryCustomizer.java index 2218bc2c8cad..cb97a99f712c 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/TomcatWebServerFactoryCustomizer.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/TomcatWebServerFactoryCustomizer.java @@ -49,6 +49,7 @@ * @author Phillip Webb * @author Artsiom Yudovin * @author Chentao Qu + * @author Rafiullah Hamedy * @since 2.0.0 */ public class TomcatWebServerFactoryCustomizer @@ -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); @@ -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) { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java index 121b000b12b8..809d440c558c 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java @@ -72,6 +72,7 @@ * @author EddĂș MelĂ©ndez * @author Quinten De Swaef * @author Venil Noronha + * @author Rafiullah Hamedy */ public class ServerPropertiesTests { @@ -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()) @@ -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 @@ -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(); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/embedded/TomcatWebServerFactoryCustomizerTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/embedded/TomcatWebServerFactoryCustomizerTests.java index 20aef9f8d632..edb1085a6472 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/embedded/TomcatWebServerFactoryCustomizerTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/embedded/TomcatWebServerFactoryCustomizerTests.java @@ -49,6 +49,7 @@ * @author Rob Tompkins * @author Artsiom Yudovin * @author Stephane Nicoll + * @author Rafiullah Hamedy */ public class TomcatWebServerFactoryCustomizerTests { @@ -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"); @@ -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");