From 05b45ba00d1890c1619092915b5c91ff94d12410 Mon Sep 17 00:00:00 2001 From: qmqz Date: Mon, 16 Jun 2025 17:11:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8B=A6=E6=88=AA=E5=99=A8?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/base/webserver/WebServer.dart | 5 ++++- lib/base/webserver/impl/ShelfWebServer.dart | 25 +++++++++++---------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/lib/base/webserver/WebServer.dart b/lib/base/webserver/WebServer.dart index baf317e..2436f6b 100644 --- a/lib/base/webserver/WebServer.dart +++ b/lib/base/webserver/WebServer.dart @@ -1,3 +1,5 @@ +import 'package:EasyDartModule/EasyDartModule.dart'; + abstract class WebServer { static late WebServer _webServer; @@ -10,7 +12,8 @@ abstract class WebServer { } void start(int port, - {Function? interceptor, TokenResult Function(String?)? tokenCheck}); + {Response? Function(Request, Map)? interceptor, + TokenResult Function(String?)? tokenCheck}); void stop(); void addHandler(handler); } diff --git a/lib/base/webserver/impl/ShelfWebServer.dart b/lib/base/webserver/impl/ShelfWebServer.dart index 93bc5f5..652712d 100644 --- a/lib/base/webserver/impl/ShelfWebServer.dart +++ b/lib/base/webserver/impl/ShelfWebServer.dart @@ -18,6 +18,7 @@ class ShelfWebServer implements WebServer { final Uuid uuid = Uuid(); final Map _wsCall = {}; TokenResult Function(String?)? tokenCheck; + Response? Function(Request, Map)? interceptor; ShelfWebServer(this.logger); final String tag = "webserver"; @@ -137,23 +138,16 @@ class ShelfWebServer implements WebServer { @override void start(int port, - {Function? interceptor, + {Response? Function(Request, Map)? interceptor, TokenResult Function(String?)? tokenCheck}) async { - //反射获取全部路由地址 var pipeline = Pipeline() + //生成请求id .addMiddleware(requestIdMiddleware()) + //api日志记录 .addMiddleware(logRequests()); - //判断拦截器类型 + //添加自定义拦截器 if (interceptor != null) { - pipeline = pipeline.addMiddleware((Handler innerHandler) { - return (Request request) async { - var response = interceptor(request); - if (response == null) { - return innerHandler(request); - } - return response; - }; - }); + this.interceptor = interceptor; } if (tokenCheck != null) { this.tokenCheck = tokenCheck; @@ -240,6 +234,13 @@ class ShelfWebServer implements WebServer { return setResponseHeader(response, p[1].type); } } + //自定义拦截函数 + if (interceptor != null) { + var response = interceptor!(req, payload ?? {}); + if (response != null) { + return response; + } + } if (p[3] == 2) { response = await p[2](req, payload ?? {});