| | |
| | | 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; |
| | |
| | | |
| | | @Override |
| | | public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { |
| | | |
| | | //校验 Token 放行 |
| | | String originalRequestUrl = RequestProvider.getOriginalRequestUrl(exchange); |
| | | String path = exchange.getRequest().getURI().getPath(); |
| | | if (isSkip(originalRequestUrl)) { |
| | | if (isSkip(path) || 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, "缺失令牌,鉴权失败"); |
| | | } |
| | |
| | | } |
| | | } |
| | | 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)); |
| | | } |
| | | |