Browse Source

Creats Query Predicate

pull/41/head
Spencer Gibb 8 years ago
parent
commit
83f6424c39
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. 42
      src/main/java/org/springframework/cloud/gateway/handler/predicate/QueryPredicateFactory.java
  3. 2
      src/test/java/org/springframework/cloud/gateway/test/GatewayIntegrationTests.java
  4. 2
      src/test/resources/application.yml

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

@ -14,6 +14,7 @@ import org.springframework.cloud.gateway.handler.predicate.GatewayPredicateFacto @@ -14,6 +14,7 @@ import org.springframework.cloud.gateway.handler.predicate.GatewayPredicateFacto
import org.springframework.cloud.gateway.handler.GatewayWebHandler;
import org.springframework.cloud.gateway.handler.ServerWebExchangePredicateHandlerMapping;
import org.springframework.cloud.gateway.handler.predicate.MethodPredicateFactory;
import org.springframework.cloud.gateway.handler.predicate.QueryPredicateFactory;
import org.springframework.cloud.gateway.handler.predicate.UrlPredicateFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -82,6 +83,11 @@ public class GatewayAutoConfiguration { @@ -82,6 +83,11 @@ public class GatewayAutoConfiguration {
return new HeaderPredicateFactory();
}
@Bean
public QueryPredicateFactory queryPredicateFactory() {
return new QueryPredicateFactory();
}
@Configuration
@ConditionalOnClass(Endpoint.class)
protected static class GatewayActuatorConfiguration {

42
src/main/java/org/springframework/cloud/gateway/handler/predicate/QueryPredicateFactory.java

@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
package org.springframework.cloud.gateway.handler.predicate;
import java.util.List;
import java.util.function.Predicate;
import org.springframework.web.server.ServerWebExchange;
/**
* @author Spencer Gibb
*/
public class QueryPredicateFactory implements GatewayPredicateFactory {
@Override
public String getName() {
return "Query";
}
@Override
public Predicate<ServerWebExchange> create(String param, String[] args) {
//TODO: caching can happen here
return exchange -> {
String regexp = null;
if (args != null && args.length == 1) {
regexp = args[0];
}
if (regexp == null) {
// check existence of header
return exchange.getRequest().getQueryParams().containsKey(param);
}
List<String> values = exchange.getRequest().getQueryParams().get(param);
for (String value : values) {
if (value.matches(regexp)) {
return true;
}
}
return false;
};
}
}

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

@ -86,7 +86,7 @@ public class GatewayIntegrationTests { @@ -86,7 +86,7 @@ public class GatewayIntegrationTests {
@Test
public void compositeRouteWorks() {
Mono<ClientResponse> result = webClient.exchange(
GET("http://localhost:" + port + "/headers")
GET("http://localhost:" + port + "/headers?foo=bar&baz")
.header("Host", "www.foo.org")
.header("X-Request-Id", "123")
.build()

2
src/test/resources/application.yml

@ -17,6 +17,8 @@ spring: @@ -17,6 +17,8 @@ spring:
- Url=/headers
- Method=GET
- Header=X-Request-Id, \d+
- Query=foo, ba.
- Query=baz
# =====================================
- id: default_path_to_httpbin

Loading…
Cancel
Save