diff --git a/pom.xml b/pom.xml index 4b08ada..a004c82 100644 --- a/pom.xml +++ b/pom.xml @@ -18,6 +18,20 @@ + + + org.thingsboard + rest-client + 4.2.1 + + + + + org.apache.commons + commons-lang3 + 3.14.0 + + org.springframework.cloud diff --git a/src/main/java/com/tuoheng/gateway/filter/WebSocketFilter.java b/src/main/java/com/tuoheng/gateway/filter/WebSocketFilter.java index dbbeb57..e10ea54 100644 --- a/src/main/java/com/tuoheng/gateway/filter/WebSocketFilter.java +++ b/src/main/java/com/tuoheng/gateway/filter/WebSocketFilter.java @@ -1,13 +1,18 @@ package com.tuoheng.gateway.filter; +import com.tuoheng.gateway.utils.IotClient; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; import org.springframework.http.HttpHeaders; +import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; +import org.springframework.web.util.UriComponentsBuilder; import reactor.core.publisher.Mono; +import java.net.URI; + /** * WebSocket 过滤器 * 用于处理 WebSocket 连接的转发和日志记录 @@ -16,6 +21,10 @@ import reactor.core.publisher.Mono; @Component public class WebSocketFilter extends AbstractGatewayFilterFactory { + // TODO: 后续需要修改为动态获取的 token + private static final String JWT_TOKEN = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZW5hbnRAdGhpbmdzYm9hcmQub3JnIiwidXNlcklkIjoiYTc3ODE5ZjAtYWU1My0xMWYwLTlmMDAtOGQ2NDc3MDZjZWMyIiwic2NvcGVzIjpbIlRFTkFOVF9BRE1JTiJdLCJzZXNzaW9uSWQiOiI4M2U3MzEzMS1hMWVkLTRjMmQtOTk4Mi1jNDAwM2E5OTQ3MjIiLCJleHAiOjE3NjQ4NDY2ODQsImlzcyI6InRoaW5nc2JvYXJkLmlvIiwiaWF0IjoxNzY0ODM3Njg0LCJlbmFibGVkIjp0cnVlLCJpc1B1YmxpYyI6ZmFsc2UsInRlbmFudElkIjoiYTcwZjFlZjAtYWU1My0xMWYwLTlmMDAtOGQ2NDc3MDZjZWMyIiwiY3VzdG9tZXJJZCI6IjEzODE0MDAwLTFkZDItMTFiMi04MDgwLTgwODA4MDgwODA4MCJ9.XHwZPSzyBcMEjJSJl7FnoIpo5UFO9a0YiU6q0eEikMlzyKHyzwVD01Gtkt6jykjuJP4xBSeaapw47wRL-HPhCQ"; + + // private static final String JWT_TOKEN = "123"; public WebSocketFilter() { super(Config.class); } @@ -25,8 +34,32 @@ public class WebSocketFilter extends AbstractGatewayFilterFactory { logRequest(exchange); - return chain.filter(exchange).then(Mono.fromRunnable(() -> { - logResponse(exchange); + // 修改请求 URI,添加 token 参数 + ServerHttpRequest request = exchange.getRequest(); + URI originalUri = request.getURI(); + + String token = IotClient.getToken(); + + // 在原有 URI 基础上添加 token 参数 + URI modifiedUri = UriComponentsBuilder.fromUri(originalUri) + .queryParam("token", token) + .build() + .toUri(); + + // 创建新的请求对象 + ServerHttpRequest modifiedRequest = request.mutate() + .uri(modifiedUri) + .build(); + + // 创建新的 exchange + ServerWebExchange modifiedExchange = exchange.mutate() + .request(modifiedRequest) + .build(); + + log.info("添加 token 参数后的 URI: {}", modifiedUri); + + return chain.filter(modifiedExchange).then(Mono.fromRunnable(() -> { + logResponse(modifiedExchange); })); }; } diff --git a/src/main/java/com/tuoheng/gateway/utils/IotClient.java b/src/main/java/com/tuoheng/gateway/utils/IotClient.java new file mode 100644 index 0000000..e1b9067 --- /dev/null +++ b/src/main/java/com/tuoheng/gateway/utils/IotClient.java @@ -0,0 +1,34 @@ +package com.tuoheng.gateway.utils; + +import org.thingsboard.rest.client.RestClient; +import org.thingsboard.server.common.data.Device; +import org.thingsboard.server.common.data.EntityType; +import org.thingsboard.server.common.data.kv.AttributeKvEntry; +import org.thingsboard.server.common.data.kv.TsKvEntry; +import org.thingsboard.server.common.data.page.PageData; +import org.thingsboard.server.common.data.page.PageLink; +import org.thingsboard.server.common.data.query.*; +import org.thingsboard.server.common.data.util.CollectionsUtil; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + + +public class IotClient { + + public static String getToken() { + // ThingsBoard REST API URL + String url = "http://iot.t-aaron.com:18080"; + // Default Tenant Administrator credentials + String username = "tenant@thingsboard.org"; + String password = "tuoheng2023"; + // Creating new rest client and auth with credentials + RestClient client = new RestClient(url); + client.login(username, password); + String result = client.getToken(); + client.logout(); + client.close(); + return result; + } +}