Spring Boot:为嵌入式Tomcat启用HTTP TRACE方法

时间:2018-01-23 09:16:07

标签: tomcat spring-boot http-trace

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

  

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

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

我已经找到了Spring Boot for Tomcat服务器支持的属性:

properties supported by spring boot for tomcat server

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

2 个答案:

答案 0 :(得分:3)

您可以通过编程方式配置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.*类似财产完成?

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

答案 1 :(得分:0)

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

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

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

@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