Add filters() method to Java DSL.

Deprecates direct filter methods after predicates.

Thanks @joshlong
This commit is contained in:
Spencer Gibb
2018-02-02 16:22:31 -05:00
parent 7f92ea1213
commit da2f28e25b
4 changed files with 231 additions and 14 deletions

View File

@@ -16,15 +16,27 @@
package org.springframework.cloud.gateway.route.builder;
import java.net.URI;
import java.net.URL;
import java.util.Collection;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.route.Route;
import org.springframework.http.HttpStatus;
import org.springframework.tuple.Tuple;
import org.springframework.util.Assert;
import org.springframework.web.server.ServerWebExchange;
import java.util.function.Predicate;
import com.netflix.hystrix.HystrixObservableCommand;
import static org.springframework.cloud.gateway.route.builder.BooleanSpec.Operator.*;
import static org.springframework.cloud.gateway.route.builder.BooleanSpec.Operator.AND;
import static org.springframework.cloud.gateway.route.builder.BooleanSpec.Operator.NEGATE;
import static org.springframework.cloud.gateway.route.builder.BooleanSpec.Operator.OR;
public class BooleanSpec extends GatewayFilterSpec {
public class BooleanSpec extends GatewayFilterSpec { //TODO after next release, extend UriSpec
enum Operator { AND, OR, NEGATE }
@@ -48,6 +60,10 @@ public class BooleanSpec extends GatewayFilterSpec {
return new BooleanOpSpec(routeBuilder, builder, NEGATE);
}
public UriSpec filters(Function<GatewayFilterSpec, UriSpec> fn) {
return fn.apply(new GatewayFilterSpec(routeBuilder, builder));
}
public static class BooleanOpSpec extends PredicateSpec {
private Operator operator;
@@ -73,4 +89,203 @@ public class BooleanSpec extends GatewayFilterSpec {
return createBooleanSpec();
}
}
//TODO: after next release remove all deprecated methods
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec gatewayFilters(List<GatewayFilter> gatewayFilters) {
return super.gatewayFilters(gatewayFilters);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec add(GatewayFilter gatewayFilter) {
return super.add(gatewayFilter);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec filter(GatewayFilter gatewayFilter) {
return super.filter(gatewayFilter);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec filter(GatewayFilter gatewayFilter, int order) {
return super.filter(gatewayFilter, order);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec addAll(Collection<GatewayFilter> gatewayFilters) {
return super.addAll(gatewayFilters);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec addRequestHeader(String headerName, String headerValue) {
return super.addRequestHeader(headerName, headerValue);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec addRequestParameter(String param, String value) {
return super.addRequestParameter(param, value);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec addResponseHeader(String headerName, String headerValue) {
return super.addResponseHeader(headerName, headerValue);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec hystrix(String commandName) {
return super.hystrix(commandName);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec hystrix(HystrixObservableCommand.Setter setter) {
return super.hystrix(setter);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec hystrix(String commandName, URI fallbackUri) {
return super.hystrix(commandName, fallbackUri);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec hystrix(HystrixObservableCommand.Setter setter, URI fallbackUri) {
return super.hystrix(setter, fallbackUri);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec prefixPath(String prefix) {
return super.prefixPath(prefix);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec preserveHostHeader() {
return super.preserveHostHeader();
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec redirect(int status, URI url) {
return super.redirect(status, url);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec redirect(int status, String url) {
return super.redirect(status, url);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec redirect(String status, URI url) {
return super.redirect(status, url);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec redirect(String status, String url) {
return super.redirect(status, url);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec redirect(HttpStatus status, URL url) {
return super.redirect(status, url);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec removeNonProxyHeaders() {
return super.removeNonProxyHeaders();
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec removeNonProxyHeaders(String... headersToRemove) {
return super.removeNonProxyHeaders(headersToRemove);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec removeRequestHeader(String headerName) {
return super.removeRequestHeader(headerName);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec removeResponseHeader(String headerName) {
return super.removeResponseHeader(headerName);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec requestRateLimiter(Tuple args) {
return super.requestRateLimiter(args);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec rewritePath(String regex, String replacement) {
return super.rewritePath(regex, replacement);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec secureHeaders() {
return super.secureHeaders();
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec setPath(String template) {
return super.setPath(template);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec setRequestHeader(String headerName, String headerValue) {
return super.setRequestHeader(headerName, headerValue);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec setResponseHeader(String headerName, String headerValue) {
return super.setResponseHeader(headerName, headerValue);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec setStatus(int status) {
return super.setStatus(status);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec setStatus(String status) {
return super.setStatus(status);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec setStatus(HttpStatus status) {
return super.setStatus(status);
}
@Override
@Deprecated /** @deprecated use {@link #filters(Function)} */
public GatewayFilterSpec saveSession() {
return super.saveSession();
}
}

View File

@@ -71,9 +71,9 @@ public class PreserveHostHeaderGatewayFilterFactoryTests extends BaseWebClientTe
return builder.routes().route("test_preserve_host_header",
r -> r.order(-1)
.host("**.preservehostheader.org")
.prefixPath("/httpbin")
.preserveHostHeader()
.setRequestHeader("Host", "myhost.net")
.filters(f -> f.prefixPath("/httpbin")
.preserveHostHeader()
.setRequestHeader("Host", "myhost.net"))
.uri(uri))
.build();
}

View File

@@ -72,9 +72,9 @@ public class SetRequestHeaderGatewayFilterFactoryTests extends BaseWebClientTest
return builder.routes().route("test_set_request_header",
r -> r.order(-1)
.host("**.setrequestheader.org")
.prefixPath("/httpbin")
.addRequestHeader("X-Req-Foo", "First")
.setRequestHeader("X-Req-Foo", "Second")
.filters(f -> f.prefixPath("/httpbin")
.addRequestHeader("X-Req-Foo", "First")
.setRequestHeader("X-Req-Foo", "Second"))
.uri(uri))
.build();
}

View File

@@ -45,19 +45,21 @@ public class GatewaySampleApplication {
//@formatter:off
return builder.routes()
.route(r -> r.host("**.abc.org").and().path("/image/png")
.addResponseHeader("X-TestHeader", "foobar")
.uri("http://httpbin.org:80")
.filters(f ->
f.addResponseHeader("X-TestHeader", "foobar"))
.uri("http://httpbin.org:80")
)
.route(r -> r.path("/image/webp")
.addResponseHeader("X-AnotherHeader", "baz")
.filters(f ->
f.addResponseHeader("X-AnotherHeader", "baz"))
.uri("http://httpbin.org:80")
)
.route(r -> r.order(-1)
.host("**.throttle.org").and().path("/get")
.filter(throttle.apply(1,
.filters(f -> f.filter(throttle.apply(1,
1,
10,
TimeUnit.SECONDS))
TimeUnit.SECONDS)))
.uri("http://httpbin.org:80")
)
.build();