ke
2024-11-26 b672cafe6a447c9b19691b583df9542ad84bce2c
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;
/**
 * 鉴权认证
@@ -59,6 +60,7 @@
   @Override
   public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
      //校验 Token 放行
      String originalRequestUrl = RequestProvider.getOriginalRequestUrl(exchange);
      String path = exchange.getRequest().getURI().getPath();
@@ -88,13 +90,72 @@
         }
      }
      return chain.filter(exchange);
      //校验 Token 放行
//      String originalRequestUrl = RequestProvider.getOriginalRequestUrl(exchange);
//      String path = exchange.getRequest().getURI().getPath();
//      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, "缺失令牌,鉴权失败");
//      }
//      String auth = StringUtils.isBlank(headerToken) ? paramToken : headerToken;
//      String token = JwtUtil.getToken(auth);
//      Claims claims = JwtUtil.parseJWT(token);
//      if (token == null || claims == null) {
//         return unAuth(resp, "请求未授权");
//      }
//      //判断 Token 状态
//      if (jwtProperties.getState()) {
//         String tenantId = String.valueOf(claims.get(TokenConstant.TENANT_ID));
//         String userId = String.valueOf(claims.get(TokenConstant.USER_ID));
//         String accessToken = JwtUtil.getAccessToken(tenantId, userId, token);
//         if (!token.equalsIgnoreCase(accessToken)) {
//            return unAuth(resp, "令牌已失效");
//         }
//      }
//      return chain.filter(exchange);
   }
   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));
   }