it-source

'완화' 설정내장된 Tomcat에 대한 QueryChars'

criticalcode 2023. 7. 5. 20:46
반응형

'완화' 설정내장된 Tomcat에 대한 QueryChars'

설정 방법relaxedQueryChars봄 부츠에 내장된 Tomcat을 위해?

여기서 설명하는 커넥터 특성이지만 Spring Boot 설명서에는 이러한 매개 변수가 나열되어 있지 않습니다.

Tomcat의 Connector 속성을 일반적으로 설정하는 방법은 무엇입니까?

저는 당신이 속성 파일로 이것을 할 수 있는지 확신할 수 없습니다.이게 효과가 있을 거라 믿습니다.

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

Spring Boot 2.x를 사용하는 경우 아래와 같이 WebServerFactoryCustomizer를 사용해야 합니다.

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

가장 간단한 방법은 서버를 구성하는 것입니다(application.properties에 줄 추가).다음과 같은 것을 추가할 수 있습니다.

server.tomcat.relaxed-path-chars=<,>,etc
  • 스프링 문서 URI 경로에 허용되어야 하는 인코딩되지 않은 추가 문자의 쉼표로 구분된 목록입니다."< > [ \ ] ^ ' { | }"만 허용됩니다.*

저를 위한 해결책으로 이 작업을 수행했습니다.

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

}

언급URL : https://stackoverflow.com/questions/51703746/setting-relaxedquerychars-for-embedded-tomcat

반응형