为嵌入式Tomcat设置'relaxedQueryChars'

Ale*_*sev 9 java tomcat spring-boot

如何设置relaxedQueryCharsSpring Boot嵌入式Tomcat?

此处描述的连接器属性,但Spring Boot 文档没有列出此类参数.

如何设置Tomcat的Connector属性?

pvp*_*ran 8

我不确定你是否可以使用属性文件执行此操作.我相信这应该有效

@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");
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 正确,但可以使用 lambda `factory.addConnectorCustomizers(connector -&gt;connector.setAttribute("relaxedQueryChars", "yourvaluehere"))` 进行简化 (2认同)

小智 7

最简单的方法是配置服务器(在 application.properties 中添加一行)。你可以添加这样的东西:

server.tomcat.relaxed-path-chars=<,>,etc
Run Code Online (Sandbox Code Playgroud)
  • Spring 文档URI 路径中应允许的其他未编码字符的逗号分隔列表。仅允许“< > [ \ ] ^ ` { | }”。*


mat*_*ein 5

我这样做是作为我的工作解决方案:

@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", "<>[\\]^`{|}");
        });
    }

}
Run Code Online (Sandbox Code Playgroud)


Sun*_*aha 5

如果您使用的是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", "<>[\\]^`{|}");
        });
    }
}
Run Code Online (Sandbox Code Playgroud)