Skip to content

Commit 2307cc7

Browse files
committed
Merge branch 'usrivastava92/ability-to-turn-off-a-route-without-removing'
2 parents 7cc9434 + 28a7da8 commit 2307cc7

File tree

5 files changed

+67
-4
lines changed

5 files changed

+67
-4
lines changed

spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/PropertiesRouteDefinitionLocator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public PropertiesRouteDefinitionLocator(GatewayProperties properties) {
3434

3535
@Override
3636
public Flux<RouteDefinition> getRouteDefinitions() {
37-
return Flux.fromIterable(this.properties.getRoutes());
37+
return Flux.fromIterable(this.properties.getRoutes()).filter(RouteDefinition::isEnabled);
3838
}
3939

4040
}

spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/RouteDefinition.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ public class RouteDefinition {
5656

5757
private int order = 0;
5858

59+
private boolean enabled = true;
60+
5961
public RouteDefinition() {
6062
}
6163

@@ -125,6 +127,14 @@ public void setMetadata(Map<String, Object> metadata) {
125127
this.metadata = metadata;
126128
}
127129

130+
public boolean isEnabled() {
131+
return enabled;
132+
}
133+
134+
public void setEnabled(boolean enabled) {
135+
this.enabled = enabled;
136+
}
137+
128138
@Override
129139
public boolean equals(Object o) {
130140
if (this == o) {
@@ -136,18 +146,19 @@ public boolean equals(Object o) {
136146
RouteDefinition that = (RouteDefinition) o;
137147
return this.order == that.order && Objects.equals(this.id, that.id)
138148
&& Objects.equals(this.predicates, that.predicates) && Objects.equals(this.filters, that.filters)
139-
&& Objects.equals(this.uri, that.uri) && Objects.equals(this.metadata, that.metadata);
149+
&& Objects.equals(this.uri, that.uri) && Objects.equals(this.metadata, that.metadata)
150+
&& Objects.equals(this.enabled, that.enabled);
140151
}
141152

142153
@Override
143154
public int hashCode() {
144-
return Objects.hash(this.id, this.predicates, this.filters, this.uri, this.metadata, this.order);
155+
return Objects.hash(this.id, this.predicates, this.filters, this.uri, this.metadata, this.order, this.enabled);
145156
}
146157

147158
@Override
148159
public String toString() {
149160
return "RouteDefinition{" + "id='" + id + '\'' + ", predicates=" + predicates + ", filters=" + filters
150-
+ ", uri=" + uri + ", order=" + order + ", metadata=" + metadata + '}';
161+
+ ", uri=" + uri + ", order=" + order + ", metadata=" + metadata + ", enabled=" + enabled + '}';
151162
}
152163

153164
}

spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RouteDefinitionRouteLocatorTests.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,35 @@ public void contextLoads() {
8282
}).expectComplete().verify();
8383
}
8484

85+
@Test
86+
public void disabledRoutesAreNotLoaded() {
87+
List<RoutePredicateFactory> predicates = Arrays.asList(new HostRoutePredicateFactory());
88+
List<GatewayFilterFactory> gatewayFilterFactories = Arrays.asList(
89+
new RemoveResponseHeaderGatewayFilterFactory(), new AddResponseHeaderGatewayFilterFactory(),
90+
new TestOrderedGatewayFilterFactory());
91+
GatewayProperties gatewayProperties = new GatewayProperties();
92+
gatewayProperties.setRoutes(List.of(new RouteDefinition() {
93+
{
94+
setId("bar");
95+
setUri(URI.create("https://bar.example.com"));
96+
setEnabled(false);
97+
setPredicates(List.of(new PredicateDefinition("Host=*.example.com")));
98+
setFilters(Arrays.asList(new FilterDefinition("RemoveResponseHeader=Server"),
99+
new FilterDefinition("TestOrdered="),
100+
new FilterDefinition("AddResponseHeader=X-Response-Foo, Bar")));
101+
}
102+
}));
103+
104+
PropertiesRouteDefinitionLocator routeDefinitionLocator = new PropertiesRouteDefinitionLocator(
105+
gatewayProperties);
106+
@SuppressWarnings("deprecation")
107+
RouteDefinitionRouteLocator routeDefinitionRouteLocator = new RouteDefinitionRouteLocator(
108+
new CompositeRouteDefinitionLocator(Flux.just(routeDefinitionLocator)), predicates,
109+
gatewayFilterFactories, gatewayProperties, new ConfigurationService(null, () -> null, () -> null));
110+
111+
StepVerifier.create(routeDefinitionRouteLocator.getRoutes()).expectComplete().verify();
112+
}
113+
85114
@Test
86115
public void simpleRetryDefinitionLoads() {
87116
List<RoutePredicateFactory> predicates = Arrays.asList(new HostRoutePredicateFactory());

spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/GatewayIntegrationTests.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.ArrayList;
2020
import java.util.List;
2121
import java.util.Map;
22+
import java.util.Optional;
2223

2324
import org.apache.commons.logging.Log;
2425
import org.apache.commons.logging.LogFactory;
@@ -38,6 +39,7 @@
3839
import org.springframework.cloud.gateway.filter.headers.XForwardedHeadersFilter;
3940
import org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping;
4041
import org.springframework.cloud.gateway.route.CachingRouteLocator;
42+
import org.springframework.cloud.gateway.route.RouteDefinition;
4143
import org.springframework.context.ApplicationContext;
4244
import org.springframework.context.ApplicationListener;
4345
import org.springframework.context.annotation.Bean;
@@ -80,6 +82,18 @@ void listenersInOrder() {
8082
.isTrue();
8183
}
8284

85+
@Test
86+
void checkFilterIsDisabled() {
87+
Optional<RouteDefinition> disabledRoute = properties.getRoutes()
88+
.stream()
89+
.filter(r -> "disabled_config_test".equals(r.getId()))
90+
.findFirst();
91+
assertThat(disabledRoute).as("Disabled route is present")
92+
.isPresent()
93+
.get()
94+
.hasFieldOrPropertyWithValue("enabled", false);
95+
}
96+
8397
@Test
8498
void complexContentTypeWorks() {
8599
testClient.post()

spring-cloud-gateway-server/src/test/resources/application.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,15 @@ spring:
525525
- Host=**.weighthigh.org
526526
- Weight=group1, 8
527527

528+
# =====================================
529+
- id: disabled_config_test
530+
uri: ${test.uri}
531+
enabled: false
532+
predicates:
533+
- name: Path
534+
args:
535+
pattern: /**
536+
528537
# =====================================
529538
# should be last and not follow alphabetical order
530539
- id: default_path_to_httpbin

0 commit comments

Comments
 (0)