Browse Source

Add SetResponseHeader filter

pull/41/head
Spencer Gibb 8 years ago
parent
commit
916ece75b8
No known key found for this signature in database
GPG Key ID: 7788A47380690861
  1. 6
      src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java
  2. 21
      src/main/java/org/springframework/cloud/gateway/filter/factory/SetResponseHeaderFilterFactory.java
  3. 21
      src/test/java/org/springframework/cloud/gateway/test/GatewayIntegrationTests.java
  4. 11
      src/test/resources/application.yml

6
src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java

@ -16,6 +16,7 @@ import org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter; @@ -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 { @@ -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 {

21
src/main/java/org/springframework/cloud/gateway/filter/factory/SetResponseHeaderFilterFactory.java

@ -0,0 +1,21 @@ @@ -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);
};
}
}

21
src/test/java/org/springframework/cloud/gateway/test/GatewayIntegrationTests.java

@ -234,6 +234,27 @@ public class GatewayIntegrationTests { @@ -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")

11
src/test/resources/application.yml

@ -57,6 +57,17 @@ spring: @@ -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

Loading…
Cancel
Save