独立 Tomcat 允许您通过allowTrace
属性启用 TRACE HTTP 方法:
allowTrace -
boolean
可用于启用或禁用 TRACE HTTP 方法的值。如果未指定,则此属性设置为false
。
如果我必须为使用嵌入式 Tomcat 的 Spring Boot 项目做同样的事情 - 我可以使用什么样的配置/属性设置?
我已经为 Tomcat 服务器寻找 Spring Boot 支持的属性:
但它似乎没有列出。任何想法如何实现这一目标。
独立 Tomcat 允许您通过allowTrace
属性启用 TRACE HTTP 方法:
allowTrace -
boolean
可用于启用或禁用 TRACE HTTP 方法的值。如果未指定,则此属性设置为false
。
如果我必须为使用嵌入式 Tomcat 的 Spring Boot 项目做同样的事情 - 我可以使用什么样的配置/属性设置?
我已经为 Tomcat 服务器寻找 Spring Boot 支持的属性:
但它似乎没有列出。任何想法如何实现这一目标。
您可以以编程方式配置Connector.allowTrace
属性。在这种情况下,您必须为类定义 beanEmbeddedServletContainerFactory
并通过调用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
前缀的属性都会自动映射到 class org.springframework.boot.autoconfigure.web.ServerProperties.Tomcat
。如果您查看它的 javadocs(或 IDE 中的源代码),您会发现没有类似setAllowTrace(boolean value)
或类似的方法。
上述解决方案仅适用于 Spring Boot 1。对于 Spring Boot 2,以下工作:
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() {
return customizer -> customizer.addConnectorCustomizers(connector -> {
connector.setAllowTrace(true);
});
}
如果要在管理端口上应用 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
如果你想启用 TRACE Http 方法,你可以WebSecurityConfigurerAdapter
像这样扩展:
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public HttpFirewall configureFirewall() {
StrictHttpFirewall strictHttpFirewall = new StrictHttpFirewall();
strictHttpFirewall
.setAllowedHttpMethods(Arrays.asList("GET","POST","PUT","DELETE","OPTIONS","TRACE"));
return strictHttpFirewall;
}
}