Simplify the configuration of the ProtocolHandler
This commit introduces a new callback interface that can be used to customize the ProtocolHandler on a Tomcat Connector. See gh-16342
This commit is contained in:
committed by
Madhura Bhave
parent
6bb5311984
commit
2eaa64f82e
@@ -28,6 +28,7 @@ import org.springframework.boot.web.embedded.jetty.JettyReactiveWebServerFactory
|
||||
import org.springframework.boot.web.embedded.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
|
||||
import org.springframework.boot.web.embedded.tomcat.TomcatContextCustomizer;
|
||||
import org.springframework.boot.web.embedded.tomcat.TomcatProtocolHandlerCustomizer;
|
||||
import org.springframework.boot.web.embedded.tomcat.TomcatReactiveWebServerFactory;
|
||||
import org.springframework.boot.web.embedded.undertow.UndertowReactiveWebServerFactory;
|
||||
import org.springframework.boot.web.reactive.server.ReactiveWebServerFactory;
|
||||
@@ -76,12 +77,16 @@ abstract class ReactiveWebServerFactoryConfiguration {
|
||||
@Bean
|
||||
public TomcatReactiveWebServerFactory tomcatReactiveWebServerFactory(
|
||||
ObjectProvider<TomcatConnectorCustomizer> connectorCustomizers,
|
||||
ObjectProvider<TomcatContextCustomizer> contextCustomizers) {
|
||||
ObjectProvider<TomcatContextCustomizer> contextCustomizers,
|
||||
ObjectProvider<TomcatProtocolHandlerCustomizer> protocolHandlerCustomizers) {
|
||||
TomcatReactiveWebServerFactory factory = new TomcatReactiveWebServerFactory();
|
||||
factory.getTomcatConnectorCustomizers().addAll(
|
||||
connectorCustomizers.orderedStream().collect(Collectors.toList()));
|
||||
factory.getTomcatContextCustomizers().addAll(
|
||||
contextCustomizers.orderedStream().collect(Collectors.toList()));
|
||||
factory.getTomcatProtocolHandlerCustomizers()
|
||||
.addAll(protocolHandlerCustomizers.orderedStream()
|
||||
.collect(Collectors.toList()));
|
||||
return factory;
|
||||
}
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@ import org.springframework.boot.autoconfigure.condition.SearchStrategy;
|
||||
import org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory;
|
||||
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
|
||||
import org.springframework.boot.web.embedded.tomcat.TomcatContextCustomizer;
|
||||
import org.springframework.boot.web.embedded.tomcat.TomcatProtocolHandlerCustomizer;
|
||||
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
|
||||
import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory;
|
||||
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
|
||||
@@ -66,12 +67,16 @@ class ServletWebServerFactoryConfiguration {
|
||||
@Bean
|
||||
public TomcatServletWebServerFactory tomcatServletWebServerFactory(
|
||||
ObjectProvider<TomcatConnectorCustomizer> connectorCustomizers,
|
||||
ObjectProvider<TomcatContextCustomizer> contextCustomizers) {
|
||||
ObjectProvider<TomcatContextCustomizer> contextCustomizers,
|
||||
ObjectProvider<TomcatProtocolHandlerCustomizer> protocolHandlerCustomizers) {
|
||||
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
|
||||
factory.getTomcatConnectorCustomizers().addAll(
|
||||
connectorCustomizers.orderedStream().collect(Collectors.toList()));
|
||||
factory.getTomcatContextCustomizers().addAll(
|
||||
contextCustomizers.orderedStream().collect(Collectors.toList()));
|
||||
factory.getTomcatProtocolHandlerCustomizers()
|
||||
.addAll(protocolHandlerCustomizers.orderedStream()
|
||||
.collect(Collectors.toList()));
|
||||
return factory;
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
|
||||
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
|
||||
import org.springframework.boot.web.embedded.tomcat.TomcatContextCustomizer;
|
||||
import org.springframework.boot.web.embedded.tomcat.TomcatProtocolHandlerCustomizer;
|
||||
import org.springframework.boot.web.embedded.tomcat.TomcatReactiveWebServerFactory;
|
||||
import org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebApplicationContext;
|
||||
import org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext;
|
||||
@@ -131,6 +132,21 @@ public class ReactiveWebServerFactoryAutoConfigurationTests {
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void tomcatProtocolHandlerCustomizerBeanIsAddedToFactory() {
|
||||
ReactiveWebApplicationContextRunner runner = new ReactiveWebApplicationContextRunner(
|
||||
AnnotationConfigReactiveWebApplicationContext::new)
|
||||
.withConfiguration(AutoConfigurations
|
||||
.of(ReactiveWebServerFactoryAutoConfiguration.class))
|
||||
.withUserConfiguration(
|
||||
TomcatProtocolHandlerCustomizerConfiguration.class);
|
||||
runner.run((context) -> {
|
||||
TomcatReactiveWebServerFactory factory = context
|
||||
.getBean(TomcatReactiveWebServerFactory.class);
|
||||
assertThat(factory.getTomcatProtocolHandlerCustomizers()).hasSize(1);
|
||||
});
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
protected static class HttpHandlerConfiguration {
|
||||
|
||||
@@ -193,4 +209,15 @@ public class ReactiveWebServerFactoryAutoConfigurationTests {
|
||||
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
static class TomcatProtocolHandlerCustomizerConfiguration {
|
||||
|
||||
@Bean
|
||||
public TomcatProtocolHandlerCustomizer protocolHandlerCustomizer() {
|
||||
return (protocolHandler) -> {
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.springframework.boot.test.context.runner.ContextConsumer;
|
||||
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
|
||||
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
|
||||
import org.springframework.boot.web.embedded.tomcat.TomcatContextCustomizer;
|
||||
import org.springframework.boot.web.embedded.tomcat.TomcatProtocolHandlerCustomizer;
|
||||
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
|
||||
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
|
||||
import org.springframework.boot.web.servlet.ServletRegistrationBean;
|
||||
@@ -170,6 +171,21 @@ public class ServletWebServerFactoryAutoConfigurationTests {
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void tomcatProtocolHandlerCustomizerBeanIsAddedToFactory() {
|
||||
WebApplicationContextRunner runner = new WebApplicationContextRunner(
|
||||
AnnotationConfigServletWebServerApplicationContext::new)
|
||||
.withConfiguration(AutoConfigurations
|
||||
.of(ServletWebServerFactoryAutoConfiguration.class))
|
||||
.withUserConfiguration(
|
||||
TomcatProtocolHandlerCustomizerConfiguration.class);
|
||||
runner.run((context) -> {
|
||||
TomcatServletWebServerFactory factory = context
|
||||
.getBean(TomcatServletWebServerFactory.class);
|
||||
assertThat(factory.getTomcatProtocolHandlerCustomizers()).hasSize(1);
|
||||
});
|
||||
}
|
||||
|
||||
private ContextConsumer<AssertableWebApplicationContext> verifyContext() {
|
||||
return this::verifyContext;
|
||||
}
|
||||
@@ -308,4 +324,15 @@ public class ServletWebServerFactoryAutoConfigurationTests {
|
||||
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
static class TomcatProtocolHandlerCustomizerConfiguration {
|
||||
|
||||
@Bean
|
||||
public TomcatProtocolHandlerCustomizer protocolHandlerCustomizer() {
|
||||
return (protocolHandler) -> {
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user