为嵌入式 Tomcat 设置“relaxedQueryChars”

Posted

技术标签:

【中文标题】为嵌入式 Tomcat 设置“relaxedQueryChars”【英文标题】:Setting 'relaxedQueryChars' for embedded Tomcat 【发布时间】:2019-01-13 04:25:12 【问题描述】:

如何为 Spring Boot 嵌入式 Tomcat 设置 relaxedQueryChars

here 描述的连接器属性,但 Spring Boot documentation 没有列出这样的参数。

Tomcat的Connector属性一般如何设置?

【问题讨论】:

【参考方案1】:

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

@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");
            
        );
    

【讨论】:

正确,但可以使用 lambda factory.addConnectorCustomizers(connector -&gt; connector.setAttribute("relaxedQueryChars", "yourvaluehere"))进行简化【参考方案2】:

如果您使用的是 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", "<>[\\]^`|");
        );
    

【讨论】:

不要忘记为包含这个的类添加@Configuration注解。【参考方案3】:

我这样做是为了解决我的问题:

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


【讨论】:

【参考方案4】:

最简单的方法是配置服务器(在 application.properties 中添加一行)。 您可以添加如下内容:

server.tomcat.relaxed-path-chars=<,>,etc
Spring Documentation URI 路径中应允许的其他未编码字符的逗号分隔列表。只允许使用“ [ \ ] ^ ` | ”。*

【讨论】:

以上是关于为嵌入式 Tomcat 设置“relaxedQueryChars”的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Boot 嵌入式 tomcat 设置会话超时

Spring Boot postgresql嵌入式tomcat启动失败

为嵌入式 tomcat 指定自定义 web.xml

从 Maven 插件为嵌入式 Tomcat 配置日志记录

SpringBoot配置嵌入式的Servlet

嵌入式tomcat上的JDBC连接问题