【问题标题】:Spring Boot: enable HTTP TRACE method for embedded TomcatSpring Boot:为嵌入式 Tomcat 启用 HTTP TRACE 方法
【发布时间】:2018-07-02 01:16:27
【问题描述】:

独立 Tomcat 允许您通过allowTrace 属性启用 TRACE HTTP 方法:

allowTrace - 一个 boolean 值,可用于启用或禁用 TRACE HTTP 方法。如果未指定,则此属性设置为 false.

如果我必须为使用嵌入式 Tomcat 的 Spring Boot 项目做同样的事情 - 我可以使用什么样的配置/属性设置?

我已经为 Tomcat 服务器寻找 Spring Boot 支持的属性:

但它似乎没有列出。任何想法如何实现这一点。

【问题讨论】:

    标签: tomcat spring-boot http-trace


    【解决方案1】:

    上述解决方案仅适用于 Spring Boot 1。对于 Spring Boot 2,以下适用:

        @Bean
        public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() {
            return customizer -> customizer.addConnectorCustomizers(connector -> {
                connector.setAllowTrace(true);
            });
        }
    

    如果你想在managemant端口上应用if,你需要创建一个如下所示的配置类:

    @ManagementContextConfiguration
    public class ManagementInterfaceConfiguration {
    
        @Bean
        public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() {
            return customizer -> customizer.addConnectorCustomizers(connector -> {
                connector.setAllowTrace(true);
            });
        }
    
    }
    

    META-INF/spring.factories 中的一个资源(=在类路径上)可以拾取它:

    org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration=\
    com.package.ManagementInterfaceConfiguration
    

    【讨论】:

      【解决方案2】:

      您可以通过编程方式配置Connector.allowTrace 属性。在这种情况下,您必须为类 EmbeddedServletContainerFactory 定义 bean,并通过调用 TomcatEmbeddedServletContainerFactory.addConnectorCustomizers(...) 方法添加连接器定制器。它允许您访问Connector 对象并调用您需要的任何配置方法。在这种情况下,我们只需调用connector.setAllowTrace(true)

      import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
      import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      
      @Configuration
      public class TomcatConfiguration {
      
          @Bean
          public EmbeddedServletContainerFactory embeddedServletContainerFactory() {
              TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
      
              factory.addConnectorCustomizers(connector -> {
                  connector.setAllowTrace(true);
              });
              return factory;
          }
      }
      

      您可以在单独的配置类中配置此 bean(如上面的示例),或者您可以简单地将此 bean 方法添加到您的主 Spring Boot 应用程序类中。

      不能用server.tomcat.* like 属性来完成吗?

      此时 - 不。当前的 Spring Boot 版本 (1.5.9-RELEASE) 不允许使用简单的属性进行设置。所有带有server.tomcat 前缀的属性都会自动映射到org.springframework.boot.autoconfigure.web.ServerProperties.Tomcat 类。如果您查看它的 javadocs(或 IDE 中的源代码),您会发现没有像 setAllowTrace(boolean value) 或类似的方法。

      【讨论】:

      • 我很欣赏你的回答,这在春天是很有可能的......但同时是否存在一个简单的基于 application.properties 的属性......
      • @samshers 不,此时您不能使用 server.tomcat 前缀属性设置此值。我已经更新了一个答案来解释为什么这是不可能的。
      • 这是它的... gr8。
      • @samshers 很高兴能帮到你 :) 祝你好运!
      猜你喜欢
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 2014-06-27
      • 2019-03-13
      • 2014-12-13
      相关资源
      最近更新 更多