【发布时间】:2019-01-13 04:25:12
【问题描述】:
如何为 Spring Boot 嵌入式 Tomcat 设置 relaxedQueryChars?
here 描述的连接器属性,但 Spring Boot documentation 没有列出这样的参数。
Tomcat的Connector属性一般如何设置?
【问题讨论】:
标签: java spring-boot tomcat
如何为 Spring Boot 嵌入式 Tomcat 设置 relaxedQueryChars?
here 描述的连接器属性,但 Spring Boot documentation 没有列出这样的参数。
Tomcat的Connector属性一般如何设置?
【问题讨论】:
标签: java spring-boot tomcat
我不确定您是否可以使用属性文件执行此操作。我相信这应该有效
@Component
public class MyTomcatWebServerCustomizer
implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
connector.setAttribute("relaxedQueryChars", "yourvaluehere");
}
});
}
}
【讨论】:
factory.addConnectorCustomizers(connector -> connector.setAttribute("relaxedQueryChars", "yourvaluehere"))进行简化
如果您使用的是 Spring Boot 2.x,那么您需要使用 WebSeerverFactoryCustomizer,如下所示。
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory>
containerCustomizer(){
return new EmbeddedTomcatCustomizer();
}
private static class EmbeddedTomcatCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
connector.setAttribute("relaxedPathChars", "<>[\\]^`{|}");
connector.setAttribute("relaxedQueryChars", "<>[\\]^`{|}");
});
}
}
【讨论】:
我这样做是为了解决我的问题:
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer(){
return new MyCustomizer();
}
private static class MyCustomizer implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer factory) {
if(factory instanceof TomcatEmbeddedServletContainerFactory) {
customizeTomcat((TomcatEmbeddedServletContainerFactory) factory);
}
}
void customizeTomcat(TomcatEmbeddedServletContainerFactory factory) {
factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
connector.setAttribute("relaxedPathChars", "<>[\\]^`{|}");
connector.setAttribute("relaxedQueryChars", "<>[\\]^`{|}");
});
}
}
【讨论】:
最简单的方法是配置服务器(在 application.properties 中添加一行)。 您可以添加如下内容:
server.tomcat.relaxed-path-chars=<,>,etc
【讨论】: