eladmin icon indicating copy to clipboard operation
eladmin copied to clipboard

优化tomcat配置relaxedQueryChars方式,采用TomcatConnectorCustomizer来实现

Open bearBoy80 opened this issue 1 year ago • 0 comments

之前实现通过

   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接口

bearBoy80 avatar Aug 11 '22 10:08 bearBoy80