From 0447c27274a1ac1c0111879116760d4aa88844a1 Mon Sep 17 00:00:00 2001 From: qmqz Date: Thu, 9 Jan 2025 17:03:27 +0800 Subject: [PATCH] =?UTF-8?q?mqttid=E5=90=8E=E7=BC=80=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E6=97=B6=E9=97=B4=E6=88=B3=E9=98=B2=E6=AD=A2?= =?UTF-8?q?=E5=86=B2=E7=AA=81=20web=E6=9C=8D=E5=8A=A1=E5=99=A8handler?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E5=8A=A0=E5=85=A5jwt=E8=A7=A3=E7=A0=81?= =?UTF-8?q?=E5=90=8E=E7=9A=84=E5=8F=82=E6=95=B0=20=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=8F=91=E7=8E=B0=E6=96=B0=E5=A2=9E=E4=BB=8E=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=85=A8=E9=83=A8ip=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E5=8C=B9=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/base/discovery/impl/NacosDiscovery.dart | 18 ++++++++++++++++-- lib/base/mqtt/mqtt.dart | 4 ++-- lib/base/webserver/impl/ShelfWebServer.dart | 15 ++++++++++++++- pubspec.yaml | 1 + 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/lib/base/discovery/impl/NacosDiscovery.dart b/lib/base/discovery/impl/NacosDiscovery.dart index 696d68b..2c3d0a4 100644 --- a/lib/base/discovery/impl/NacosDiscovery.dart +++ b/lib/base/discovery/impl/NacosDiscovery.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:io'; import 'package:dio/dio.dart'; import 'package:EasyDartModule/base/discovery/Discovery.dart'; @@ -17,11 +18,24 @@ class NacosDiscovery implements Discovery { Future registerInstance(String serviceName, String ip, int port, {String groupName = 'DEFAULT_GROUP'}) async { try { + //获取本机网卡ip + String? nip; + for (var interface in await NetworkInterface.list()) { + for (var addr in interface.addresses) { + if (addr.address.startsWith(ip)) { + nip = addr.address; + break; + } + } + if (nip != null) { + break; + } + } final response = await dio.post( '/nacos/v2/ns/instance', queryParameters: { 'serviceName': serviceName, - 'ip': ip, + 'ip': nip ?? ip, 'port': port, 'groupName': groupName, 'namespaceId': config.namespaceId, @@ -40,7 +54,7 @@ class NacosDiscovery implements Discovery { final rr = await dio .put("/nacos/v1/ns/instance/beat", queryParameters: { 'serviceName': serviceName, - 'ip': ip, + 'ip': nip ?? ip, 'port': port, 'groupName': groupName, 'namespaceId': config.namespaceId, diff --git a/lib/base/mqtt/mqtt.dart b/lib/base/mqtt/mqtt.dart index 35b93e1..aa1f490 100644 --- a/lib/base/mqtt/mqtt.dart +++ b/lib/base/mqtt/mqtt.dart @@ -21,8 +21,8 @@ class Mqtt { if (_client != null) { return true; } - _client = - MqttServerClient.withPort(_config.host, _config.clientId, _config.port); + _client = MqttServerClient.withPort(_config.host, + "${_config.clientId}_${DateTime.now().millisecondsSinceEpoch}", _config.port); _client?.autoReconnect = true; await _client?.connect(_config.username, _config.password); diff --git a/lib/base/webserver/impl/ShelfWebServer.dart b/lib/base/webserver/impl/ShelfWebServer.dart index 747fe98..b6fcd3e 100644 --- a/lib/base/webserver/impl/ShelfWebServer.dart +++ b/lib/base/webserver/impl/ShelfWebServer.dart @@ -4,6 +4,7 @@ import 'dart:mirrors'; import 'package:EasyDartModule/EasyDartModule.dart'; import 'package:EasyDartModule/base/logger/Logger.dart'; import 'package:EasyDartModule/base/webserver/WebServer.dart'; +import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart'; import 'package:shelf/shelf.dart'; import 'package:shelf/shelf_io.dart'; import 'package:shelf_router/shelf_router.dart'; @@ -187,7 +188,19 @@ class ShelfWebServer implements WebServer { //把地址加入路由 addRouter(m.reflectee.method, p, (req, [a, b, c, d, e, f]) { - return im.invoke(v.simpleName, [req]).reflectee; + //从request中获取token并解码传入 + String? token = req.headers["token"]; + dynamic payload; + if (token != null) { + try { + payload = JWT.decode(token).payload; + } catch (e) { + //jwt解码失败 + print(e); + } + } + return im.invoke(v.simpleName, + [req, payload ?? {}]).reflectee; }); } } diff --git a/pubspec.yaml b/pubspec.yaml index cd6652e..0b7ef31 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -19,6 +19,7 @@ dependencies: mqtt5_client: ^4.6.2 minio: ^3.5.7 redis: ^4.0.0 + dart_jsonwebtoken: ^2.14.2 dev_dependencies: lints: ^4.0.0