From 6e2a9e4d101b9c9c3b811f2d49332581c6c0f335 Mon Sep 17 00:00:00 2001
From: xieb <vip_xiaobin810@163.com>
Date: Tue, 15 Oct 2024 15:03:53 +0800
Subject: [PATCH] 鉴权

---
 skjcmanager/skjcmanager-gateway/src/main/java/cn/gistack/gateway/filter/AuthFilter.java |   34 +++++++++++++++++++++++++++++++---
 1 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/skjcmanager/skjcmanager-gateway/src/main/java/cn/gistack/gateway/filter/AuthFilter.java b/skjcmanager/skjcmanager-gateway/src/main/java/cn/gistack/gateway/filter/AuthFilter.java
index 8deb05a..39202cf 100644
--- a/skjcmanager/skjcmanager-gateway/src/main/java/cn/gistack/gateway/filter/AuthFilter.java
+++ b/skjcmanager/skjcmanager-gateway/src/main/java/cn/gistack/gateway/filter/AuthFilter.java
@@ -42,6 +42,7 @@
 import reactor.core.publisher.Mono;
 
 import java.nio.charset.StandardCharsets;
+import java.util.Base64;
 
 /**
  * 鉴权认证
@@ -62,13 +63,40 @@
 		//校验 Token 放行
 		String originalRequestUrl = RequestProvider.getOriginalRequestUrl(exchange);
 		String path = exchange.getRequest().getURI().getPath();
-		if (isSkip(path) || isSkip(originalRequestUrl)) {
+		if (isSkip(originalRequestUrl)) {
 			return chain.filter(exchange);
 		}
+
 		//校验 Token 合法性
 		ServerHttpResponse resp = exchange.getResponse();
 		String headerToken = exchange.getRequest().getHeaders().getFirst(AuthProvider.AUTH_KEY);
 		String paramToken = exchange.getRequest().getQueryParams().getFirst(AuthProvider.AUTH_KEY);
+
+		if (isSkip(path)) {
+			String header = exchange.getRequest().getHeaders().getFirst("Authorization");
+			if (header == null || !header.startsWith("Basic")) {
+				return unAuth(resp, "缺失令牌,鉴权失败");
+			}
+
+			byte[] base64Token = header.substring(6).getBytes();
+
+			byte[] decoded;
+			try {
+				decoded = Base64.getDecoder().decode(base64Token);
+			} catch (IllegalArgumentException var7) {
+				return unAuth(resp, "缺失令牌,鉴权失败");
+			}
+			String token = new String(decoded);
+			int index = token.indexOf(":");
+
+			String[] tokens = new String[]{token.substring(0, index), token.substring(index + 1)};
+			if (tokens.length <= 0) {
+				return unAuth(resp, "缺失令牌,鉴权失败");
+			}
+
+			return chain.filter(exchange);
+		}
+
 		if (StringUtils.isBlank(headerToken) && StringUtils.isBlank(paramToken)) {
 			return unAuth(resp, "缺失令牌,鉴权失败");
 		}
@@ -93,8 +121,8 @@
 	private boolean isSkip(String path) {
 		return AuthProvider.getDefaultSkipUrl().stream().anyMatch(pattern -> antPathMatcher.match(pattern, path))
 			|| authProperties.getSkipUrl().stream().anyMatch(pattern -> antPathMatcher.match(pattern, path))
- 			|| authProperties.getAuth().stream().anyMatch(auth -> antPathMatcher.match(auth.getPattern(), path))
- 			|| authProperties.getBasic().stream().anyMatch(basic -> antPathMatcher.match(basic.getPattern(), path))
+			|| authProperties.getAuth().stream().anyMatch(auth -> antPathMatcher.match(auth.getPattern(), path))
+			|| authProperties.getBasic().stream().anyMatch(basic -> antPathMatcher.match(basic.getPattern(), path))
 			|| authProperties.getSign().stream().anyMatch(sign -> antPathMatcher.match(sign.getPattern(), path));
 	}
 

--
Gitblit v1.9.3