From 49b1b6a69073095859c7e692f4e5908144eb4ae6 Mon Sep 17 00:00:00 2001 From: jasmine <362055143@qq.com> Date: Wed, 2 Apr 2025 08:39:30 +0000 Subject: [PATCH] =?UTF-8?q?feat(web):=20=E6=B7=BB=E5=8A=A0=20Undertow=20?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E9=85=8D=E7=BD=AE=E5=92=8C=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E9=85=8D=E7=BD=AE=EF=BC=8C=E9=BB=98=E8=AE=A4=E7=A6=81?= =?UTF-8?q?=E6=AD=A2=E4=B8=89=E4=B8=AA=E4=B8=8D=E5=AE=89=E5=85=A8=E7=9A=84?= =?UTF-8?q?=20HTTP=20=E6=96=B9=E6=B3=95=EF=BC=88=E5=A6=82=20CONNECT?= =?UTF-8?q?=E3=80=81TRACE=E3=80=81TRACK=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../container/UndertowAutoConfiguration.java | 61 +++++++++++++++++++ ...ot.autoconfigure.AutoConfiguration.imports | 3 +- .../src/main/resources/default-web.yml | 19 +++++- 3 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 continew-starter-web/src/main/java/top/continew/starter/web/autoconfigure/container/UndertowAutoConfiguration.java diff --git a/continew-starter-web/src/main/java/top/continew/starter/web/autoconfigure/container/UndertowAutoConfiguration.java b/continew-starter-web/src/main/java/top/continew/starter/web/autoconfigure/container/UndertowAutoConfiguration.java new file mode 100644 index 00000000..2a90dead --- /dev/null +++ b/continew-starter-web/src/main/java/top/continew/starter/web/autoconfigure/container/UndertowAutoConfiguration.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. + *

+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.gnu.org/licenses/lgpl.html + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package top.continew.starter.web.autoconfigure.container; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; +import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory; +import org.springframework.boot.web.server.WebServerFactoryCustomizer; +import org.springframework.context.annotation.Bean; + +import io.undertow.Undertow; +import io.undertow.server.handlers.DisallowedMethodsHandler; +import io.undertow.util.HttpString; + +/** + * Undertow 自定义配置 + * + * @author Jasmine + * @since 2.11.0 + */ +@AutoConfiguration +@ConditionalOnWebApplication +@ConditionalOnClass(Undertow.class) +public class UndertowAutoConfiguration { + + private static final Logger log = LoggerFactory.getLogger(UndertowAutoConfiguration.class); + + /** + * Undertow 自定义配置 + */ + @Bean + public WebServerFactoryCustomizer customize() { + return factory -> { + factory.addDeploymentInfoCustomizers(deploymentInfo -> deploymentInfo + .addInitialHandlerChainWrapper(handler -> { + // 禁止三个不安全的 HTTP 方法(如 CONNECT、TRACE、TRACK) + HttpString[] disallowedHttpMethods = {HttpString.tryFromString("CONNECT"), HttpString + .tryFromString("TRACE"), HttpString.tryFromString("TRACK")}; + return new DisallowedMethodsHandler(handler, disallowedHttpMethods); + })); + log.debug("[ContiNew Starter] - Auto Configuration 'Web-Undertow' completed initialization."); + }; + } +} diff --git a/continew-starter-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/continew-starter-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 0b58a205..c9080853 100644 --- a/continew-starter-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/continew-starter-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,2 +1,3 @@ top.continew.starter.web.autoconfigure.mvc.WebMvcAutoConfiguration -top.continew.starter.web.autoconfigure.cors.CorsAutoConfiguration \ No newline at end of file +top.continew.starter.web.autoconfigure.cors.CorsAutoConfiguration +top.continew.starter.web.autoconfigure.container.UndertowAutoConfiguration \ No newline at end of file diff --git a/continew-starter-web/src/main/resources/default-web.yml b/continew-starter-web/src/main/resources/default-web.yml index 611d9339..4d4b3cb6 100644 --- a/continew-starter-web/src/main/resources/default-web.yml +++ b/continew-starter-web/src/main/resources/default-web.yml @@ -22,4 +22,21 @@ continew-starter.web.response: exclude-packages: - io.swagger.** - org.springdoc.** - - org.springframework.boot.actuate.* \ No newline at end of file + - org.springframework.boot.actuate.* + +--- ### 服务器配置 +server: + ## Undertow 服务器配置 + undertow: + # HTTP POST 请求内容的大小上限(默认 -1,不限制) + max-http-post-size: -1 + # 以下的配置会影响 buffer,这些 buffer 会用于服务器连接的 IO 操作,有点类似 Netty 的池化内存管理 + # 每块 buffer的空间大小(越小的空间被利用越充分,不要设置太大,以免影响其他应用,合适即可) + buffer-size: 512 + # 是否分配的直接内存(NIO 直接分配的堆外内存) + direct-buffers: true + threads: + # 设置 IO 线程数,它主要执行非阻塞的任务,它们会负责多个连接(默认每个 CPU 核心一个线程) + io: 8 + # 阻塞任务线程池,当执行类似 Servlet 请求阻塞操作,Undertow 会从这个线程池中取得线程(它的值设置取决于系统的负载) + worker: 256 \ No newline at end of file