Невозможно использовать UndertowServletWebServerFactory для ограничения MAX_ENTITY_SIZE - PullRequest
1 голос
/ 03 октября 2019

Использование Spring Boot 2.1.3.RELEASE. Я пытаюсь ограничить размеры запросов, которые принимает Undertow. Хотелось бы иметь ограничение для всех типов, POST, PUT, multipart, non-multipart и т. Д. Есть 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=100 или server.undertow.max-http-post-size=1KB, но этот тоже ничего не делал.

РЕДАКТИРОВАТЬ: Сделал небольшое минимальное приложение, чтобы повторить проблему: https://github.com/jansu76/gs-spring-boot/tree/undertow-testing/complete

Это вилка из приложения helloworld Spring от https://spring.io/guides/gs/spring-boot/

У меня

Для проверки:

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.

...