无法使用UndertowServletWebServerFactory限制MAX_ENTITY_SIZE

时间:2019-10-03 15:16:24

标签: spring spring-boot undertow

使用Spring Boot 2.1.3.RELEASE。我试图限制Undertow接受的请求大小。希望对所有类型,POST,PUT,多部分,非多部分等都有限制。我认为UndertowOptions.MAX_ENTITY_SIZE应该可以使用。我添加了:

@Configuration
public class UndertowConfiguration {

    @Bean
    public UndertowServletWebServerFactory undertowServletWebServerFactory() {
        UndertowServletWebServerFactory factory = new UndertowServletWebServerFactory();

        factory.addBuilderCustomizers((UndertowBuilderCustomizer) builder -> {
            builder.setServerOption(UndertowOptions.MAX_ENTITY_SIZE, 100L);
        });

        return factory;
    }
}

但这在实践中不起作用。我正在通过将请求发送到我的REST @Controller进行测试,但是请求大小似乎没有限制。

同样,当我调试时,io.undertow.server.HttpServerExchange.getMaxEntitySize()返回52428800。所以看来我的配置没有坚持。

也尝试了一些不同的方法

@Configuration
public class UndertowConfiguration implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> {

    @Override
    public void customize(UndertowServletWebServerFactory factory) {
        factory.addBuilderCustomizers((UndertowBuilderCustomizer) builder -> {
            builder.setServerOption(UndertowOptions.MAX_ENTITY_SIZE, 100L);
        });
    }
}

这可能更接近https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-features-programmatic-embedded-container-customization示例,但结果相同。

也尝试了application.property server.undertow.max-http-post-size=100server.undertow.max-http-post-size=1KB,但是那个也没做任何事情。

编辑: 是否做了一个小型的最小应用程序来复制问题:https://github.com/jansu76/gs-spring-boot/tree/undertow-testing/complete

它是来自https://spring.io/guides/gs/spring-boot/的helloworld spring应用程序的一个分支

我有

要测试:

cd complete
./gradlew build
java -jar build/libs/gs-spring-boot-0.1.0.jar
cd src/test/resources/
./test-post.sh

脚本应向应用程序执行大型POST请求,该请求应受Undertow max帖子大小配置的限制。但事实并非如此。

似乎UndertowServletWebServerFactory将端口设置为9090,但是UndertowOptions.MAX_ENTITY_SIZE = 100无效。 server.undertow.max-http-post-size=10会设置一些最大实体大小值一段时间,但是这些值会在io.undertow.servlet.handlers.ServletInitialHandler.handleRequest:181中覆盖,这会将maxEntitySize值从10覆盖为10485760。

0 个答案:

没有答案