Add SetResponseHeader filter
This commit is contained in:
@@ -16,6 +16,7 @@ import org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter;
|
||||
import org.springframework.cloud.gateway.filter.factory.RemoveRequestHeaderFilterFactory;
|
||||
import org.springframework.cloud.gateway.filter.factory.RemoveResponseHeaderFilterFactory;
|
||||
import org.springframework.cloud.gateway.filter.factory.RewritePathFilterFactory;
|
||||
import org.springframework.cloud.gateway.filter.factory.SetResponseHeaderFilterFactory;
|
||||
import org.springframework.cloud.gateway.handler.GatewayFilteringWebHandler;
|
||||
import org.springframework.cloud.gateway.handler.GatewayPredicateHandlerMapping;
|
||||
import org.springframework.cloud.gateway.handler.GatewayWebHandler;
|
||||
@@ -138,6 +139,11 @@ public class GatewayAutoConfiguration {
|
||||
return new RewritePathFilterFactory();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public SetResponseHeaderFilterFactory setResponseHeaderFilterFactory() {
|
||||
return new SetResponseHeaderFilterFactory();
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@ConditionalOnClass(Endpoint.class)
|
||||
protected static class GatewayActuatorConfiguration {
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package org.springframework.cloud.gateway.filter.factory;
|
||||
|
||||
import org.springframework.cloud.gateway.filter.GatewayFilter;
|
||||
|
||||
/**
|
||||
* @author Spencer Gibb
|
||||
*/
|
||||
public class SetResponseHeaderFilterFactory implements FilterFactory {
|
||||
|
||||
@Override
|
||||
public GatewayFilter apply(String header, String[] args) {
|
||||
validate(args, 1);
|
||||
|
||||
//TODO: caching can happen here
|
||||
return (exchange, chain) -> {
|
||||
exchange.getResponse().getHeaders().set(header, args[0]);
|
||||
|
||||
return chain.filter(exchange);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -234,6 +234,27 @@ public class GatewayIntegrationTests {
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setResponseHeaderFilterWorks() {
|
||||
Mono<ClientResponse> result = webClient.exchange(
|
||||
GET("http://localhost:" + port + "/headers")
|
||||
.header("Host", "www.setreresponseheader.org")
|
||||
.build()
|
||||
);
|
||||
|
||||
verify( () ->
|
||||
StepVerifier.create(result)
|
||||
.consumeNextWith(
|
||||
response -> {
|
||||
HttpHeaders httpHeaders = response.headers().asHttpHeaders();
|
||||
assertThat(httpHeaders).containsKey("X-Request-Foo");
|
||||
assertThat(httpHeaders.get("X-Request-Foo")).containsExactly("Bar");
|
||||
})
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(3))
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void postWorks() {
|
||||
ClientRequest<Mono<String>> request = POST("http://localhost:" + port + "/post")
|
||||
|
||||
@@ -57,6 +57,17 @@ spring:
|
||||
- AddResponseHeader=X-Request-Foo, Bar
|
||||
- RemoveResponseHeader=X-Request-Foo
|
||||
|
||||
# =====================================
|
||||
- id: set_response_header_test
|
||||
uri: http://httpbin.org:80
|
||||
predicates:
|
||||
- Host=**.setreresponseheader.org
|
||||
- Url=/headers
|
||||
filters:
|
||||
- AddResponseHeader=X-Request-Foo, Bar1
|
||||
- AddResponseHeader=X-Request-Foo, Bar2
|
||||
- SetResponseHeader=X-Request-Foo, Bar
|
||||
|
||||
# =====================================
|
||||
- id: rewrite_path_test
|
||||
uri: http://httpbin.org:80
|
||||
|
||||
Reference in New Issue
Block a user