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

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

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

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

【问题讨论】:

    标签: java spring-boot tomcat


    【解决方案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 路径中应允许的其他未编码字符的逗号分隔列表。只允许使用“ [ \ ] ^ ` { | }”。*

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-22
        • 1970-01-01
        • 1970-01-01
        • 2015-10-30
        • 2015-06-21
        • 2010-11-25
        • 2010-11-02
        • 1970-01-01
        相关资源
        最近更新 更多