eladmin
eladmin copied to clipboard
优化tomcat配置relaxedQueryChars方式,采用TomcatConnectorCustomizer来实现
之前实现通过
public ServletWebServerFactory webServerFactory() {
TomcatServletWebServerFactory fa = new TomcatServletWebServerFactory();
fa.addConnectorCustomizers(connector -> connector.setProperty("relaxedQueryChars", "[]{}"));
return fa;
}
实现后,我们无法实现TomcatConnectorCustomizer来配置tomcat的参数,同时导致springboot默认提供一些扩展无法使用,比如TomcatContextCustomizer、TomcatProtocolHandlerCustomizer。 SpringBoot 自动化装配TomcatServletWebServerFactory代码类org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryConfiguration.EmbeddedTomcat如下:
@Bean
TomcatServletWebServerFactory tomcatServletWebServerFactory(ObjectProvider<TomcatConnectorCustomizer> connectorCustomizers, ObjectProvider<TomcatContextCustomizer> contextCustomizers, ObjectProvider<TomcatProtocolHandlerCustomizer<?>> protocolHandlerCustomizers) {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.getTomcatConnectorCustomizers().addAll((Collection)connectorCustomizers.orderedStream().collect(Collectors.toList()));
factory.getTomcatContextCustomizers().addAll((Collection)contextCustomizers.orderedStream().collect(Collectors.toList()));
factory.getTomcatProtocolHandlerCustomizers().addAll((Collection)protocolHandlerCustomizers.orderedStream().collect(Collectors.toList()));
return factory;
}
其实tomcat配置relaxedQueryChars,还可以通过实现WebServerFactoryCustomizer,并实现Ordered接口