diff --git a/pom.xml b/pom.xml
index 691e8bf..e416929 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,10 +20,10 @@
org.springframework.cloud
spring-cloud-starter-gateway
-
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
org.projectlombok
lombok
@@ -34,12 +34,42 @@
org.springframework
spring-webmvc
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+ io.lettuce
+ lettuce-core
+
+
+
+
+ redis.clients
+ jedis
+
com.squareup.okhttp3
okhttp
4.11.0
+
+ io.jsonwebtoken
+ jjwt
+ 0.9.0
+
+
+ org.apache.commons
+ commons-lang3
+
+
+
+ com.alibaba
+ fastjson
+
+
diff --git a/src/main/java/com/yxt/ss/gateway/api/AuthFilter.java b/src/main/java/com/yxt/ss/gateway/api/AuthFilter.java
new file mode 100644
index 0000000..2432bda
--- /dev/null
+++ b/src/main/java/com/yxt/ss/gateway/api/AuthFilter.java
@@ -0,0 +1,223 @@
+package com.yxt.ss.gateway.api;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.yxt.ss.gateway.api.authutils.*;
+import com.yxt.ss.gateway.api.utils.AppKeyConfig;
+import com.yxt.ss.gateway.api.utils.ResultBean;
+import com.yxt.ss.gateway.api.utils.SignatureUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.core.Ordered;
+import org.springframework.core.io.buffer.DataBuffer;
+import org.springframework.core.io.buffer.DataBufferUtils;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.stereotype.Component;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.nio.CharBuffer;
+import java.nio.charset.StandardCharsets;
+import java.time.Instant;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author dimengzhe
+ * @description 网关鉴权
+ */
+@Component
+public class AuthFilter implements GlobalFilter, Ordered {
+
+ private static final Logger log = LoggerFactory.getLogger(AuthFilter.class);
+
+ @Autowired
+ private IgnoreWhiteProperties ignoreWhite;
+ @Autowired
+ private AppKeyConfig appKeyConfig;
+
+ public String getSecret(String appKey) {
+ return appKeyConfig.getKeys().get(appKey);
+ }
+
+ @Override
+ public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+ String url = exchange.getRequest().getURI().getPath();
+ // 1. URI 白名单过滤:如果请求路径在白名单中,直接放行
+ if (isWhitelisted(url)) {
+ return chain.filter(exchange);
+ }
+
+ // 2. 提取请求参数并进行验证
+ return extractParameters(exchange)
+ .flatMap(parameters -> {
+ // 校验请求参数
+ ResultBean validationResult = validate(parameters);
+ // 校验失败,返回 401 Unauthorized 错误响应
+ if (!validationResult.getSuccess()) {
+ return setUnauthorizedResponse(exchange, validationResult.getMsg());
+ }
+
+ // 3. 如果需要,可以从参数中提取信息并添加到请求头
+ ServerHttpRequest mutableReq = exchange.getRequest().mutate()
+ .header(CacheConstants._APP, parameters.get("_app"))
+ .build();
+ ServerWebExchange mutableExchange = exchange.mutate().request(mutableReq).build();
+ // 4. 继续执行后续过滤器链
+ return chain.filter(mutableExchange);
+ });
+ }
+
+ // 提取请求参数方法:根据请求类型 (GET 或 POST) 提取参数
+ private Mono