Add support for configuring Tomcat connector's max parameter count
See gh-43286
This commit is contained in:
parent
25050386bc
commit
0d3e0245a2
|
@ -513,13 +513,11 @@ public class ServerProperties {
|
|||
*/
|
||||
private DataSize maxHttpResponseHeaderSize = DataSize.ofKilobytes(8);
|
||||
|
||||
public DataSize getMaxHttpFormPostSize() {
|
||||
return this.maxHttpFormPostSize;
|
||||
}
|
||||
|
||||
public void setMaxHttpFormPostSize(DataSize maxHttpFormPostSize) {
|
||||
this.maxHttpFormPostSize = maxHttpFormPostSize;
|
||||
}
|
||||
/**
|
||||
* Maximum number of parameters (GET plus POST) that will be automatically parsed
|
||||
* by the container. A value of less than 0 means no limit.
|
||||
*/
|
||||
private int maxParameterCount = 10000;
|
||||
|
||||
public Accesslog getAccesslog() {
|
||||
return this.accesslog;
|
||||
|
@ -669,6 +667,22 @@ public class ServerProperties {
|
|||
this.maxHttpResponseHeaderSize = maxHttpResponseHeaderSize;
|
||||
}
|
||||
|
||||
public DataSize getMaxHttpFormPostSize() {
|
||||
return this.maxHttpFormPostSize;
|
||||
}
|
||||
|
||||
public void setMaxHttpFormPostSize(DataSize maxHttpFormPostSize) {
|
||||
this.maxHttpFormPostSize = maxHttpFormPostSize;
|
||||
}
|
||||
|
||||
public int getMaxParameterCount() {
|
||||
return this.maxParameterCount;
|
||||
}
|
||||
|
||||
public void setMaxParameterCount(int maxParameterCount) {
|
||||
this.maxParameterCount = maxParameterCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tomcat access log properties.
|
||||
*/
|
||||
|
|
|
@ -119,6 +119,8 @@ public class TomcatWebServerFactoryCustomizer
|
|||
.asInt(DataSize::toBytes)
|
||||
.when((maxHttpFormPostSize) -> maxHttpFormPostSize != 0)
|
||||
.to((maxHttpFormPostSize) -> customizeMaxHttpFormPostSize(factory, maxHttpFormPostSize));
|
||||
map.from(properties::getMaxParameterCount)
|
||||
.to((maxParameterCount) -> customizeMaxParameterCount(factory, maxParameterCount));
|
||||
map.from(properties::getAccesslog)
|
||||
.when(ServerProperties.Tomcat.Accesslog::isEnabled)
|
||||
.to((enabled) -> customizeAccessLog(factory));
|
||||
|
@ -292,6 +294,10 @@ public class TomcatWebServerFactoryCustomizer
|
|||
factory.addConnectorCustomizers((connector) -> connector.setMaxPostSize(maxHttpFormPostSize));
|
||||
}
|
||||
|
||||
private void customizeMaxParameterCount(ConfigurableTomcatWebServerFactory factory, int maxParameterCount) {
|
||||
factory.addConnectorCustomizers((connector) -> connector.setMaxParameterCount(maxParameterCount));
|
||||
}
|
||||
|
||||
private void customizeAccessLog(ConfigurableTomcatWebServerFactory factory) {
|
||||
ServerProperties.Tomcat tomcatProperties = this.serverProperties.getTomcat();
|
||||
AccessLogValve valve = new AccessLogValve();
|
||||
|
|
|
@ -199,7 +199,7 @@ class ServerPropertiesTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
void testCustomizeUriEncoding() {
|
||||
void testCustomizeTomcatUriEncoding() {
|
||||
bind("server.tomcat.uri-encoding", "US-ASCII");
|
||||
assertThat(this.properties.getTomcat().getUriEncoding()).isEqualTo(StandardCharsets.US_ASCII);
|
||||
}
|
||||
|
@ -235,17 +235,23 @@ class ServerPropertiesTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
void customizeMaxKeepAliveRequests() {
|
||||
void testCustomizeTomcatMaxKeepAliveRequests() {
|
||||
bind("server.tomcat.max-keep-alive-requests", "200");
|
||||
assertThat(this.properties.getTomcat().getMaxKeepAliveRequests()).isEqualTo(200);
|
||||
}
|
||||
|
||||
@Test
|
||||
void customizeMaxKeepAliveRequestsWithInfinite() {
|
||||
void testCustomizeTomcatMaxKeepAliveRequestsWithInfinite() {
|
||||
bind("server.tomcat.max-keep-alive-requests", "-1");
|
||||
assertThat(this.properties.getTomcat().getMaxKeepAliveRequests()).isEqualTo(-1);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCustomizeTomcatMaxParameterCount() {
|
||||
bind("server.tomcat.max-parameter-count", "100");
|
||||
assertThat(this.properties.getTomcat().getMaxParameterCount()).isEqualTo(100);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCustomizeTomcatMinSpareThreads() {
|
||||
bind("server.tomcat.threads.min-spare", "10");
|
||||
|
@ -379,6 +385,12 @@ class ServerPropertiesTests {
|
|||
.isEqualTo(getDefaultConnector().getMaxPostSize());
|
||||
}
|
||||
|
||||
@Test
|
||||
void tomcatMaxParameterCountMatchesConnectorDefault() {
|
||||
assertThat(this.properties.getTomcat().getMaxParameterCount())
|
||||
.isEqualTo(getDefaultConnector().getMaxParameterCount());
|
||||
}
|
||||
|
||||
@Test
|
||||
void tomcatBackgroundProcessorDelayMatchesEngineDefault() {
|
||||
assertThat(this.properties.getTomcat().getBackgroundProcessorDelay())
|
||||
|
|
|
@ -194,6 +194,13 @@ class TomcatWebServerFactoryCustomizerTests {
|
|||
.isEqualTo(DataSize.ofMegabytes(10).toBytes()));
|
||||
}
|
||||
|
||||
@Test
|
||||
void customMaxParameterCount() {
|
||||
bind("server.tomcat.max-parameter-count=100");
|
||||
customizeAndRunServer(
|
||||
(server) -> assertThat(server.getTomcat().getConnector().getMaxParameterCount()).isEqualTo(100));
|
||||
}
|
||||
|
||||
@Test
|
||||
void customMaxRequestHttpHeaderSizeIgnoredIfNegative() {
|
||||
bind("server.max-http-request-header-size=-1");
|
||||
|
|
Loading…
Reference in New Issue