Merge branch 'aftersss-2.0.x' into 2.0.x

This commit is contained in:
Spencer Gibb
2019-01-31 14:26:08 -05:00
4 changed files with 59 additions and 32 deletions

View File

@@ -19,10 +19,20 @@ public class ForwardRoutingFilter implements GlobalFilter, Ordered {
private static final Log log = LogFactory.getLog(ForwardRoutingFilter.class);
private final ObjectProvider<DispatcherHandler> dispatcherHandler;
private final ObjectProvider<DispatcherHandler> dispatcherHandlerProvider;
//do not use this dispatcherHandler directly, use getDispatcherHandler() instead.
private volatile DispatcherHandler dispatcherHandler;
public ForwardRoutingFilter(ObjectProvider<DispatcherHandler> dispatcherHandler) {
this.dispatcherHandler = dispatcherHandler;
public ForwardRoutingFilter(ObjectProvider<DispatcherHandler> dispatcherHandlerProvider) {
this.dispatcherHandlerProvider = dispatcherHandlerProvider;
}
private DispatcherHandler getDispatcherHandler() {
if (dispatcherHandler == null) {
dispatcherHandler = dispatcherHandlerProvider.getIfAvailable();
}
return dispatcherHandler;
}
@Override
@@ -46,6 +56,6 @@ public class ForwardRoutingFilter implements GlobalFilter, Ordered {
log.trace("Forwarding to URI: "+requestUrl);
}
return this.dispatcherHandler.getIfAvailable().handle(exchange);
return this.getDispatcherHandler().handle(exchange);
}
}

View File

@@ -61,17 +61,26 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.s
public class NettyRoutingFilter implements GlobalFilter, Ordered {
private final HttpClient httpClient;
private final ObjectProvider<List<HttpHeadersFilter>> headersFilters;
private final ObjectProvider<List<HttpHeadersFilter>> headersFiltersProvider;
private final HttpClientProperties properties;
//do not use this headersFilters directly, use getHeadersFilters() instead.
private volatile List<HttpHeadersFilter> headersFilters;
public NettyRoutingFilter(HttpClient httpClient,
ObjectProvider<List<HttpHeadersFilter>> headersFilters,
ObjectProvider<List<HttpHeadersFilter>> headersFiltersProvider,
HttpClientProperties properties) {
this.httpClient = httpClient;
this.headersFilters = headersFilters;
this.headersFiltersProvider = headersFiltersProvider;
this.properties = properties;
}
public List<HttpHeadersFilter> getHeadersFilters() {
if (headersFilters == null) {
headersFilters = headersFiltersProvider.getIfAvailable();
}
return headersFilters;
}
@Override
public int getOrder() {
return Ordered.LOWEST_PRECEDENCE;
@@ -92,8 +101,7 @@ public class NettyRoutingFilter implements GlobalFilter, Ordered {
final HttpMethod method = HttpMethod.valueOf(request.getMethodValue());
final String url = requestUrl.toString();
HttpHeaders filtered = filterRequest(this.headersFilters.getIfAvailable(),
exchange);
HttpHeaders filtered = filterRequest(getHeadersFilters(), exchange);
final DefaultHttpHeaders httpHeaders = new DefaultHttpHeaders();
filtered.forEach(httpHeaders::set);
@@ -149,7 +157,7 @@ public class NettyRoutingFilter implements GlobalFilter, Ordered {
// make sure headers filters run after setting status so it is available in response
HttpHeaders filteredResponseHeaders = HttpHeadersFilter.filter(
this.headersFilters.getIfAvailable(), headers, exchange, Type.RESPONSE);
getHeadersFilters(), headers, exchange, Type.RESPONSE);
response.getHeaders().putAll(filteredResponseHeaders);

View File

@@ -38,14 +38,16 @@ public class WebsocketRoutingFilter implements GlobalFilter, Ordered {
private final WebSocketClient webSocketClient;
private final WebSocketService webSocketService;
private final ObjectProvider<List<HttpHeadersFilter>> headersFilters;
private final ObjectProvider<List<HttpHeadersFilter>> headersFiltersProvider;
//do not use this headersFilters directly, use getHeadersFilters() instead.
private volatile List<HttpHeadersFilter> headersFilters;
public WebsocketRoutingFilter(WebSocketClient webSocketClient,
WebSocketService webSocketService,
ObjectProvider<List<HttpHeadersFilter>> headersFilters) {
ObjectProvider<List<HttpHeadersFilter>> headersFiltersProvider) {
this.webSocketClient = webSocketClient;
this.webSocketService = webSocketService;
this.headersFilters = headersFilters;
this.headersFiltersProvider = headersFiltersProvider;
}
@Override
@@ -68,8 +70,7 @@ public class WebsocketRoutingFilter implements GlobalFilter, Ordered {
HttpHeaders headers = exchange.getRequest().getHeaders();
HttpHeaders filtered = filterRequest(getHeadersFilters(),
exchange);
HttpHeaders filtered = filterRequest(getHeadersFilters(), exchange);
List<String> protocols = headers.get(SEC_WEBSOCKET_PROTOCOL);
if (protocols != null) {
@@ -85,20 +86,19 @@ public class WebsocketRoutingFilter implements GlobalFilter, Ordered {
}
private List<HttpHeadersFilter> getHeadersFilters() {
List<HttpHeadersFilter> filters = this.headersFilters.getIfAvailable();
if (filters == null) {
filters = new ArrayList<>();
if (this.headersFilters == null) {
this.headersFilters = this.headersFiltersProvider.getIfAvailable(ArrayList::new);
headersFilters.add((headers, exchange) -> {
HttpHeaders filtered = new HttpHeaders();
headers.entrySet().stream()
.filter(entry -> !entry.getKey().toLowerCase().startsWith("sec-websocket"))
.forEach(header -> filtered.addAll(header.getKey(), header.getValue()));
return filtered;
});
}
filters.add((headers, exchange) -> {
HttpHeaders filtered = new HttpHeaders();
headers.entrySet().stream()
.filter(entry -> !entry.getKey().toLowerCase().startsWith("sec-websocket"))
.forEach(header -> filtered.addAll(header.getKey(), header.getValue()));
return filtered;
});
return filters;
return this.headersFilters;
}
private void changeSchemeIfIsWebSocketUpgrade(ServerWebExchange exchange) {

View File

@@ -59,11 +59,21 @@ public class HystrixGatewayFilterFactory extends AbstractGatewayFilterFactory<Hy
public static final String FALLBACK_URI = "fallbackUri";
private final ObjectProvider<DispatcherHandler> dispatcherHandler;
private final ObjectProvider<DispatcherHandler> dispatcherHandlerProvider;
//do not use this dispatcherHandler directly, use getDispatcherHandler() instead.
private volatile DispatcherHandler dispatcherHandler;
public HystrixGatewayFilterFactory(ObjectProvider<DispatcherHandler> dispatcherHandler) {
public HystrixGatewayFilterFactory(ObjectProvider<DispatcherHandler> dispatcherHandlerProvider) {
super(Config.class);
this.dispatcherHandler = dispatcherHandler;
this.dispatcherHandlerProvider = dispatcherHandlerProvider;
}
private DispatcherHandler getDispatcherHandler() {
if (dispatcherHandler == null) {
dispatcherHandler = dispatcherHandlerProvider.getIfAvailable();
}
return dispatcherHandler;
}
@Override
@@ -167,8 +177,7 @@ public class HystrixGatewayFilterFactory extends AbstractGatewayFilterFactory<Hy
ServerHttpRequest request = this.exchange.getRequest().mutate().uri(requestUrl).build();
ServerWebExchange mutated = exchange.mutate().request(request).build();
DispatcherHandler dispatcherHandler = HystrixGatewayFilterFactory.this.dispatcherHandler.getIfAvailable();
return RxReactiveStreams.toObservable(dispatcherHandler.handle(mutated));
return RxReactiveStreams.toObservable(getDispatcherHandler().handle(mutated));
}
}