Использование 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.