xieb
2024-10-15 d4374a87023f4a0fef5d973faa74d93726c4b13c
鉴权
2 files modified
40 ■■■■■ changed files
skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/utils/TokenUtil.java 7 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-gateway/src/main/java/cn/gistack/gateway/filter/AuthFilter.java 33 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/utils/TokenUtil.java
@@ -27,6 +27,7 @@
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.oauth2.common.exceptions.UnapprovedClientAuthenticationException;
import org.springframework.security.oauth2.common.exceptions.UserDeniedAuthorizationException;
import org.springframework.util.Base64Utils;
import java.util.Base64;
import java.util.Calendar;
@@ -132,6 +133,12 @@
        return tokens[0];
    }
    private static String getHttpBasic(String clientId,String clientSecret) {
        String string = clientId+":"+clientSecret;
        byte[] encode = Base64Utils.encode(string.getBytes());
        return "Basic "+new String(encode);
    }
    /**
     * 获取token过期时间(次日凌晨3点)
     *
skjcmanager/skjcmanager-gateway/src/main/java/cn/gistack/gateway/filter/AuthFilter.java
@@ -37,11 +37,13 @@
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;
import org.springframework.util.Base64Utils;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
/**
 * 鉴权认证
@@ -62,13 +64,42 @@
        //校验 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, "缺失令牌,鉴权失败");
        }