From c2243ff7363467beceb481eb25ff096af0145477 Mon Sep 17 00:00:00 2001 From: smallchill Date: Wed, 30 Oct 2019 10:23:57 +0800 Subject: [PATCH] :tada: 2.2.0.RELEASE --- .../gateway/filter/AuthFilter.java | 5 +- .../filter/GlobalRequestLogFilter.java | 11 +---- .../gateway/provider/RequestProvider.java | 49 +++++++++++++++++++ 3 files changed, 55 insertions(+), 10 deletions(-) create mode 100644 blade-gateway/src/main/java/org/springblade/gateway/provider/RequestProvider.java diff --git a/blade-gateway/src/main/java/org/springblade/gateway/filter/AuthFilter.java b/blade-gateway/src/main/java/org/springblade/gateway/filter/AuthFilter.java index baece869..a0322f38 100644 --- a/blade-gateway/src/main/java/org/springblade/gateway/filter/AuthFilter.java +++ b/blade-gateway/src/main/java/org/springblade/gateway/filter/AuthFilter.java @@ -25,6 +25,7 @@ import org.apache.commons.lang3.StringUtils; import org.springblade.core.jwt.JwtUtil; import org.springblade.gateway.props.AuthProperties; import org.springblade.gateway.provider.AuthProvider; +import org.springblade.gateway.provider.RequestProvider; import org.springblade.gateway.provider.ResponseProvider; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; @@ -53,8 +54,9 @@ public class AuthFilter implements GlobalFilter, Ordered { @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + String originalRequestUrl = RequestProvider.getOriginalRequestUrl(exchange); String path = exchange.getRequest().getURI().getPath(); - if (isSkip(path)) { + if (isSkip(path) || isSkip(originalRequestUrl)) { return chain.filter(exchange); } ServerHttpResponse resp = exchange.getResponse(); @@ -90,6 +92,7 @@ public class AuthFilter implements GlobalFilter, Ordered { return resp.writeWith(Flux.just(buffer)); } + @Override public int getOrder() { return -100; diff --git a/blade-gateway/src/main/java/org/springblade/gateway/filter/GlobalRequestLogFilter.java b/blade-gateway/src/main/java/org/springblade/gateway/filter/GlobalRequestLogFilter.java index bf991fb6..fbf7041a 100644 --- a/blade-gateway/src/main/java/org/springblade/gateway/filter/GlobalRequestLogFilter.java +++ b/blade-gateway/src/main/java/org/springblade/gateway/filter/GlobalRequestLogFilter.java @@ -22,23 +22,19 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springblade.core.jwt.JwtUtil; import org.springblade.gateway.provider.AuthProvider; +import org.springblade.gateway.provider.RequestProvider; import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; -import org.springframework.cloud.gateway.support.ServerWebExchangeUtils; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.http.HttpHeaders; import org.springframework.http.server.reactive.ServerHttpRequest; -import org.springframework.util.MultiValueMap; import org.springframework.web.server.ServerWebExchange; -import org.springframework.web.util.UriComponentsBuilder; import reactor.core.publisher.Mono; -import java.net.URI; import java.util.ArrayList; -import java.util.LinkedHashSet; import java.util.List; /** @@ -71,10 +67,7 @@ public class GlobalRequestLogFilter implements GlobalFilter, Ordered { return chain.filter(exchange); } - LinkedHashSet uris = exchange.getRequiredAttribute(ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR); - URI requestUri = uris.stream().findFirst().orElse(request.getURI()); - MultiValueMap queryParams = request.getQueryParams(); - String requestUrl = UriComponentsBuilder.fromPath(requestUri.getRawPath()).queryParams(queryParams).build().toUriString(); + String requestUrl = RequestProvider.getOriginalRequestUrl(exchange); // 构建成一条长 日志,避免并发下日志错乱 StringBuilder beforeReqLog = new StringBuilder(300); diff --git a/blade-gateway/src/main/java/org/springblade/gateway/provider/RequestProvider.java b/blade-gateway/src/main/java/org/springblade/gateway/provider/RequestProvider.java new file mode 100644 index 00000000..95c68dca --- /dev/null +++ b/blade-gateway/src/main/java/org/springblade/gateway/provider/RequestProvider.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the dreamlu.net developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: Chill 庄骞 (smallchill@163.com) + */ +package org.springblade.gateway.provider; + +import org.springframework.cloud.gateway.support.ServerWebExchangeUtils; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.util.MultiValueMap; +import org.springframework.web.server.ServerWebExchange; +import org.springframework.web.util.UriComponentsBuilder; + +import java.net.URI; +import java.util.LinkedHashSet; + +/** + * RequestProvider + * + * @author Chill + */ +public class RequestProvider { + + /** + * 获取原始url + * + * @param exchange + * @return + */ + public static String getOriginalRequestUrl(ServerWebExchange exchange) { + ServerHttpRequest request = exchange.getRequest(); + LinkedHashSet uris = exchange.getRequiredAttribute(ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR); + URI requestUri = uris.stream().findFirst().orElse(request.getURI()); + MultiValueMap queryParams = request.getQueryParams(); + return UriComponentsBuilder.fromPath(requestUri.getRawPath()).queryParams(queryParams).build().toUriString(); + } + +}