使用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);
});
}
}
也尝试了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
它是来自https://spring.io/guides/gs/spring-boot/的helloworld spring应用程序的一个分支
我有
server.undertow.max-http-post-size=10
https://github.com/jansu76/gs-spring-boot/blob/undertow-testing/complete/src/main/resources/application.properties#L1 UndertowOptions.MAX_ENTITY_SIZE
:https://github.com/jansu76/gs-spring-boot/blob/undertow-testing/complete/src/main/java/hello/UndertowConfiguration.java 要测试:
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。