Browse Source

Adds FilterFunctions.setRequestHeader()

See gh-2949
pull/3006/head
sgibb 2 years ago
parent
commit
8c25d06970
No known key found for this signature in database
GPG Key ID: 7788A47380690861
  1. 10
      spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/FilterFunctions.java
  2. 24
      spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/ServerMvcIntegrationTests.java

10
spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/FilterFunctions.java

@ -167,6 +167,16 @@ public interface FilterFunctions { @@ -167,6 +167,16 @@ public interface FilterFunctions {
};
}
@Shortcut
static HandlerFilterFunction<ServerResponse, ServerResponse> setRequestHeader(String name, String value) {
return (request, next) -> {
String expandedValue = MvcUtils.expand(request, value);
ServerRequest modified = ServerRequest.from(request)
.headers(httpHeaders -> httpHeaders.set(name, expandedValue)).build();
return next.handle(modified);
};
}
static HandlerFilterFunction<ServerResponse, ServerResponse> stripPrefix() {
return stripPrefix(1);
}

24
spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/ServerMvcIntegrationTests.java

@ -80,6 +80,7 @@ import static org.springframework.cloud.gateway.server.mvc.filter.FilterFunction @@ -80,6 +80,7 @@ import static org.springframework.cloud.gateway.server.mvc.filter.FilterFunction
import static org.springframework.cloud.gateway.server.mvc.filter.FilterFunctions.rewritePath;
import static org.springframework.cloud.gateway.server.mvc.filter.FilterFunctions.routeId;
import static org.springframework.cloud.gateway.server.mvc.filter.FilterFunctions.setPath;
import static org.springframework.cloud.gateway.server.mvc.filter.FilterFunctions.setRequestHeader;
import static org.springframework.cloud.gateway.server.mvc.filter.FilterFunctions.setStatus;
import static org.springframework.cloud.gateway.server.mvc.filter.FilterFunctions.stripPrefix;
import static org.springframework.cloud.gateway.server.mvc.filter.LoadBalancerFilterFunctions.lb;
@ -368,6 +369,17 @@ public class ServerMvcIntegrationTests { @@ -368,6 +369,17 @@ public class ServerMvcIntegrationTests {
});
}
@Test
public void setRequestHeaderWorks() {
restClient.get().uri("/headers").header("test", "setrequestheader").exchange().expectStatus().isOk()
.expectBody(Map.class).consumeWith(res -> {
Map<String, Object> map = res.getResponseBody();
Map<String, Object> headers = getMap(map, "headers");
assertThat(headers).doesNotContainEntry("X-Test", "value1");
assertThat(headers).containsEntry("X-Test", "value2");
});
}
@SpringBootConfiguration
@EnableAutoConfiguration
@LoadBalancerClient(name = "httpbin", configuration = TestLoadBalancerConfig.Httpbin.class)
@ -611,6 +623,18 @@ public class ServerMvcIntegrationTests { @@ -611,6 +623,18 @@ public class ServerMvcIntegrationTests {
// @formatter:on
}
@Bean
public RouterFunction<ServerResponse> gatewayRouterFunctionsSetRequestHeader() {
// @formatter:off
return route("testsetrequestheader")
.GET("/headers", header("test", "setrequestheader"), http())
.filter(new HttpbinUriResolver())
.filter(addRequestHeader("X-Test", "value1"))
.filter(setRequestHeader("X-Test", "value2"))
.build();
// @formatter:on
}
}
@RestController

Loading…
Cancel
Save