11
11
import org .springframework .beans .factory .annotation .Autowired ;
12
12
import org .springframework .cloud .client .ServiceInstance ;
13
13
import org .springframework .cloud .client .loadbalancer .LoadBalancerClient ;
14
+ import org .springframework .cloud .gateway .config .LoadBalancerProperties ;
14
15
import org .springframework .cloud .gateway .filter .GatewayFilterChain ;
15
16
import org .springframework .cloud .gateway .filter .LoadBalancerClientFilter ;
16
17
import org .springframework .cloud .gateway .support .NotFoundException ;
@@ -36,8 +37,11 @@ public class GrayLoadBalancerClientFilter extends LoadBalancerClientFilter {
36
37
@ Autowired
37
38
private RequestLocalStorage requestLocalStorage ;
38
39
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 ;
41
45
}
42
46
43
47
@@ -46,22 +50,22 @@ public GrayLoadBalancerClientFilter(LoadBalancerClient loadBalancer) {
46
50
public Mono <Void > filter (ServerWebExchange exchange , GatewayFilterChain chain ) {
47
51
URI url = exchange .getAttribute (GATEWAY_REQUEST_URL_ATTR );
48
52
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 ))) {
50
55
return chain .filter (exchange );
51
56
}
52
- //preserve the original url
57
+ // preserve the original url
53
58
addOriginalRequestUrl (exchange , url );
54
59
55
60
log .trace ("LoadBalancerClientFilter url before: " + url );
56
-
57
-
58
61
// gray append start
59
62
ServerHttpRequest .Builder requestBuilder = exchange .getRequest ().mutate ();
60
63
final ServiceInstance instance = choose (url , exchange , requestBuilder );
61
64
// gray append end
62
65
63
66
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 ());
65
69
}
66
70
67
71
URI uri = exchange .getRequest ().getURI ();
@@ -73,7 +77,8 @@ public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
73
77
overrideScheme = url .getScheme ();
74
78
}
75
79
76
- URI requestUrl = loadBalancer .reconstructURI (new DelegatingServiceInstance (instance , overrideScheme ), uri );
80
+ URI requestUrl = loadBalancer .reconstructURI (
81
+ new DelegatingServiceInstance (instance , overrideScheme ), uri );
77
82
78
83
log .trace ("LoadBalancerClientFilter url chosen: " + requestUrl );
79
84
exchange .getAttributes ().put (GATEWAY_REQUEST_URL_ATTR , requestUrl );
0 commit comments