修改配置

This commit is contained in:
孙小云 2025-12-04 16:56:19 +08:00
parent 2597f02517
commit 36389ab14b
3 changed files with 83 additions and 2 deletions

14
pom.xml
View File

@ -18,6 +18,20 @@
</properties> </properties>
<dependencies> <dependencies>
<dependency>
<groupId>org.thingsboard</groupId>
<artifactId>rest-client</artifactId>
<version>4.2.1</version>
</dependency>
<!-- 显式声明 commons-lang3 版本以解决 NoSuchMethodError -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.14.0</version>
</dependency>
<!-- Spring Cloud Gateway --> <!-- Spring Cloud Gateway -->
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>

View File

@ -1,13 +1,18 @@
package com.tuoheng.gateway.filter; package com.tuoheng.gateway.filter;
import com.tuoheng.gateway.utils.IotClient;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.util.UriComponentsBuilder;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import java.net.URI;
/** /**
* WebSocket 过滤器 * WebSocket 过滤器
* 用于处理 WebSocket 连接的转发和日志记录 * 用于处理 WebSocket 连接的转发和日志记录
@ -16,6 +21,10 @@ import reactor.core.publisher.Mono;
@Component @Component
public class WebSocketFilter extends AbstractGatewayFilterFactory<WebSocketFilter.Config> { public class WebSocketFilter extends AbstractGatewayFilterFactory<WebSocketFilter.Config> {
// TODO: 后续需要修改为动态获取的 token
private static final String JWT_TOKEN = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZW5hbnRAdGhpbmdzYm9hcmQub3JnIiwidXNlcklkIjoiYTc3ODE5ZjAtYWU1My0xMWYwLTlmMDAtOGQ2NDc3MDZjZWMyIiwic2NvcGVzIjpbIlRFTkFOVF9BRE1JTiJdLCJzZXNzaW9uSWQiOiI4M2U3MzEzMS1hMWVkLTRjMmQtOTk4Mi1jNDAwM2E5OTQ3MjIiLCJleHAiOjE3NjQ4NDY2ODQsImlzcyI6InRoaW5nc2JvYXJkLmlvIiwiaWF0IjoxNzY0ODM3Njg0LCJlbmFibGVkIjp0cnVlLCJpc1B1YmxpYyI6ZmFsc2UsInRlbmFudElkIjoiYTcwZjFlZjAtYWU1My0xMWYwLTlmMDAtOGQ2NDc3MDZjZWMyIiwiY3VzdG9tZXJJZCI6IjEzODE0MDAwLTFkZDItMTFiMi04MDgwLTgwODA4MDgwODA4MCJ9.XHwZPSzyBcMEjJSJl7FnoIpo5UFO9a0YiU6q0eEikMlzyKHyzwVD01Gtkt6jykjuJP4xBSeaapw47wRL-HPhCQ";
// private static final String JWT_TOKEN = "123";
public WebSocketFilter() { public WebSocketFilter() {
super(Config.class); super(Config.class);
} }
@ -25,8 +34,32 @@ public class WebSocketFilter extends AbstractGatewayFilterFactory<WebSocketFilte
return (exchange, chain) -> { return (exchange, chain) -> {
logRequest(exchange); logRequest(exchange);
return chain.filter(exchange).then(Mono.fromRunnable(() -> { // 修改请求 URI添加 token 参数
logResponse(exchange); 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);
})); }));
}; };
} }

View File

@ -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;
}
}