1111import org .springframework .beans .factory .annotation .Autowired ;
1212import org .springframework .cloud .client .ServiceInstance ;
1313import org .springframework .cloud .client .loadbalancer .LoadBalancerClient ;
14+ import org .springframework .cloud .gateway .config .LoadBalancerProperties ;
1415import org .springframework .cloud .gateway .filter .GatewayFilterChain ;
1516import org .springframework .cloud .gateway .filter .LoadBalancerClientFilter ;
1617import org .springframework .cloud .gateway .support .NotFoundException ;
@@ -36,8 +37,11 @@ public class GrayLoadBalancerClientFilter extends LoadBalancerClientFilter {
3637 @ Autowired
3738 private RequestLocalStorage requestLocalStorage ;
3839
39- public GrayLoadBalancerClientFilter (LoadBalancerClient loadBalancer ) {
40- super (loadBalancer );
40+ private LoadBalancerProperties properties ;
41+
42+ public GrayLoadBalancerClientFilter (LoadBalancerClient loadBalancer , LoadBalancerProperties properties ) {
43+ super (loadBalancer , properties );
44+ this .properties = properties ;
4145 }
4246
4347
@@ -46,22 +50,22 @@ public GrayLoadBalancerClientFilter(LoadBalancerClient loadBalancer) {
4650 public Mono <Void > filter (ServerWebExchange exchange , GatewayFilterChain chain ) {
4751 URI url = exchange .getAttribute (GATEWAY_REQUEST_URL_ATTR );
4852 String schemePrefix = exchange .getAttribute (GATEWAY_SCHEME_PREFIX_ATTR );
49- if (url == null || (!"lb" .equals (url .getScheme ()) && !"lb" .equals (schemePrefix ))) {
53+ if (url == null
54+ || (!"lb" .equals (url .getScheme ()) && !"lb" .equals (schemePrefix ))) {
5055 return chain .filter (exchange );
5156 }
52- //preserve the original url
57+ // preserve the original url
5358 addOriginalRequestUrl (exchange , url );
5459
5560 log .trace ("LoadBalancerClientFilter url before: " + url );
56-
57-
5861 // gray append start
5962 ServerHttpRequest .Builder requestBuilder = exchange .getRequest ().mutate ();
6063 final ServiceInstance instance = choose (url , exchange , requestBuilder );
6164 // gray append end
6265
6366 if (instance == null ) {
64- throw new NotFoundException ("Unable to find instance for " + url .getHost ());
67+ throw NotFoundException .create (properties .isUse404 (),
68+ "Unable to find instance for " + url .getHost ());
6569 }
6670
6771 URI uri = exchange .getRequest ().getURI ();
@@ -73,7 +77,8 @@ public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
7377 overrideScheme = url .getScheme ();
7478 }
7579
76- URI requestUrl = loadBalancer .reconstructURI (new DelegatingServiceInstance (instance , overrideScheme ), uri );
80+ URI requestUrl = loadBalancer .reconstructURI (
81+ new DelegatingServiceInstance (instance , overrideScheme ), uri );
7782
7883 log .trace ("LoadBalancerClientFilter url chosen: " + requestUrl );
7984 exchange .getAttributes ().put (GATEWAY_REQUEST_URL_ATTR , requestUrl );
0 commit comments