| | |
| | | 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; |
| | | |
| | | /** |
| | | * 鉴权认证 |
| | |
| | | //校验 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, "缺失令牌,鉴权失败"); |
| | | } |