Browse Source

Merge pull request #2918 from ryanjbaxter/use-new-path-attribute-in-cb-filter

Remove gateway predicate path attribute in CB filter.
pull/2938/head
Ryan Baxter 1 year ago committed by GitHub
parent
commit
2bb47feb47
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerFilterFactory.java
  2. 6
      spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerFilterFactoryTests.java
  3. 14
      spring-cloud-gateway-server/src/test/resources/application.yml

2
spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerFilterFactory.java

@ -43,6 +43,7 @@ import static java.util.Collections.singletonList; @@ -43,6 +43,7 @@ import static java.util.Collections.singletonList;
import static java.util.Optional.ofNullable;
import static org.springframework.cloud.gateway.support.GatewayToStringStyler.filterToStringCreator;
import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.CIRCUITBREAKER_EXECUTION_EXCEPTION_ATTR;
import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_PREDICATE_PATH_CONTAINER_ATTR;
import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR;
import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.containsEncodedParts;
import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.reset;
@ -115,6 +116,7 @@ public abstract class SpringCloudCircuitBreakerFilterFactory @@ -115,6 +116,7 @@ public abstract class SpringCloudCircuitBreakerFilterFactory
URI requestUrl = UriComponentsBuilder.fromUri(uri).host(null).port(null)
.uri(config.getFallbackUri()).scheme(null).build(encoded).toUri();
exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, requestUrl);
exchange.getAttributes().remove(GATEWAY_PREDICATE_PATH_CONTAINER_ATTR);
addExceptionDetails(t, exchange);
// Reset the exchange

6
spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerFilterFactoryTests.java

@ -60,6 +60,12 @@ public abstract class SpringCloudCircuitBreakerFilterFactoryTests extends BaseWe @@ -60,6 +60,12 @@ public abstract class SpringCloudCircuitBreakerFilterFactoryTests extends BaseWe
.isOk().expectBody().json("{\"from\":\"circuitbreakerfallbackcontroller\"}");
}
@Test
public void filterFallbackPath() {
testClient.get().uri("/status/200").header("Host", "www.circuitbreakerfallbackpath.org").exchange().expectStatus()
.isOk().expectBody().jsonPath("$.headers").exists();
}
@Test
public void filterWorksJavaDsl() {
testClient.get().uri("/get").header("Host", "www.circuitbreakerjava.org").exchange().expectStatus().isOk()

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

@ -104,6 +104,20 @@ spring: @@ -104,6 +104,20 @@ spring:
name: fallbackcmd
fallbackUri: forward:/circuitbreakerFallbackController
# =====================================
- id: circuitbreaker_fallback_test_path
uri: ${test.uri}
predicates:
- Path=/status/**
- Host=**.circuitbreakerfallbackpath.org
filters:
- name: CircuitBreaker
args:
name: fallbackcmd
statusCodes:
- 200
fallbackUri: forward:/headers
# =====================================
- id: circuitbreaker_fallback_test_statuscode
uri: ${test.uri}

Loading…
Cancel
Save