From 3c8d864b5f68af5167199e0d5c9ff6c0c5852638 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期一, 20 一月 2025 11:35:45 +0800 Subject: [PATCH] !639 发布 5.3.0-BETA 公测版本 Merge pull request !639 from 疯狂的狮子Li/dev --- ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/UndertowConfig.java | 39 ++++++++++++++++++++++++++++++++++++--- 1 files changed, 36 insertions(+), 3 deletions(-) diff --git a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/UndertowConfig.java b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/UndertowConfig.java index 421ce6d..84f88ff 100644 --- a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/UndertowConfig.java +++ b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/UndertowConfig.java @@ -1,10 +1,14 @@ package org.dromara.common.web.config; import io.undertow.server.DefaultByteBufferPool; +import io.undertow.server.handlers.DisallowedMethodsHandler; +import io.undertow.util.HttpString; import io.undertow.websockets.jsr.WebSocketDeploymentInfo; +import org.dromara.common.core.utils.SpringUtils; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory; import org.springframework.boot.web.server.WebServerFactoryCustomizer; +import org.springframework.core.task.VirtualThreadTaskExecutor; /** * Undertow 鑷畾涔夐厤缃� @@ -15,15 +19,44 @@ public class UndertowConfig implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> { /** - * 璁剧疆 Undertow 鐨� websocket 缂撳啿姹� + * 鑷畾涔� Undertow 閰嶇疆 + * <p> + * 涓昏閰嶇疆鍐呭鍖呮嫭锛� + * 1. 閰嶇疆 WebSocket 閮ㄧ讲淇℃伅 + * 2. 鍦ㄨ櫄鎷熺嚎绋嬫ā寮忎笅浣跨敤铏氭嫙绾跨▼姹� + * 3. 绂佺敤涓嶅畨鍏ㄧ殑 HTTP 鏂规硶锛屽 CONNECT銆乀RACE銆乀RACK + * </p> + * + * @param factory Undertow 鐨� Web 鏈嶅姟鍣ㄥ伐鍘� */ @Override public void customize(UndertowServletWebServerFactory factory) { - // 榛樿涓嶇洿鎺ュ垎閰嶅唴瀛� 濡傛灉椤圭洰涓娇鐢ㄤ簡 websocket 寤鸿鐩存帴鍒嗛厤 factory.addDeploymentInfoCustomizers(deploymentInfo -> { + // 閰嶇疆 WebSocket 閮ㄧ讲淇℃伅锛岃缃� WebSocket 浣跨敤鐨勭紦鍐插尯姹� WebSocketDeploymentInfo webSocketDeploymentInfo = new WebSocketDeploymentInfo(); - webSocketDeploymentInfo.setBuffers(new DefaultByteBufferPool(false, 512)); + webSocketDeploymentInfo.setBuffers(new DefaultByteBufferPool(true, 1024)); deploymentInfo.addServletContextAttribute("io.undertow.websockets.jsr.WebSocketDeploymentInfo", webSocketDeploymentInfo); + + // 濡傛灉鍚敤浜嗚櫄鎷熺嚎绋嬶紝閰嶇疆 Undertow 浣跨敤铏氭嫙绾跨▼姹� + if (SpringUtils.isVirtual()) { + // 鍒涘缓铏氭嫙绾跨▼姹狅紝绾跨▼姹犲墠缂�涓� "undertow-" + VirtualThreadTaskExecutor executor = new VirtualThreadTaskExecutor("undertow-"); + // 璁剧疆铏氭嫙绾跨▼姹犱负鎵ц鍣ㄥ拰寮傛鎵ц鍣� + deploymentInfo.setExecutor(executor); + deploymentInfo.setAsyncExecutor(executor); + } + + // 閰嶇疆绂佹鏌愪簺涓嶅畨鍏ㄧ殑 HTTP 鏂规硶锛堝 CONNECT銆乀RACE銆乀RACK锛� + deploymentInfo.addInitialHandlerChainWrapper(handler -> { + // 绂佹涓変釜鏂规硶 CONNECT/TRACE/TRACK 涔熸槸涓嶅畨鍏ㄧ殑 閬垮厤鐖櫕楠氭壈 + HttpString[] disallowedHttpMethods = { + HttpString.tryFromString("CONNECT"), + HttpString.tryFromString("TRACE"), + HttpString.tryFromString("TRACK") + }; + // 浣跨敤 DisallowedMethodsHandler 鎷︽埅骞舵嫆缁濊繖浜涙柟娉曠殑璇锋眰 + return new DisallowedMethodsHandler(handler, disallowedHttpMethods); + }); }); } -- Gitblit v1.9.3