| | |
| | | import reactor.core.publisher.Mono; |
| | | |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.Base64; |
| | | |
| | | /** |
| | | * 鉴权认证 |
| | |
| | | |
| | | @Override |
| | | public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { |
| | | |
| | | //校验 Token 放行 |
| | | String originalRequestUrl = RequestProvider.getOriginalRequestUrl(exchange); |
| | | String path = exchange.getRequest().getURI().getPath(); |
| | |
| | | } |
| | | } |
| | | 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)); |
| | | } |
| | | |