xieb
2024-10-15 c5420855bba7db4315ca4591794b0c189c71bef8
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,41 @@
      //校验 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);
      //校验 basic 放行
      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 +122,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));
   }