配置文件为:
spring:
cloud:
gateway:
routes:
- id: gateway-server
uri: http://localhost:8081
predicates:
- Path=/**
filters:
- SomeFilterFactory
使用的过滤器是:
public class SomeFilterFactory
extends AbstractGatewayFilterFactory<SomeFilterFactory.SomeConfig> {
public SomeFilterFactory() {
super(SomeFilterFactory.SomeConfig.class);
}
@Override
public GatewayFilter apply(SomeFilterFactory.SomeConfig config) {
return (exchange, chain) -> {
ServerHttpRequest request = exchange.getRequest();
String someHeader = request.getHeaders().getFirst("someHeader");
// do your things here
return chain.filter(exchange);
};
}
public static class SomeConfig {
// your config if required
// or use name value config
}
我的要求是先验证在每个传入请求中传递的标头值,然后再传递给下游。
答案 0 :(得分:-1)
您必须将过滤器名称设置为以“ GatewayFilterFactory”结尾。并且在配置文件中,您必须使用标准化的FilterFactory名称设置过滤器。
在下面的链接中,您可以检查什么是标准化的FilterFactory名称。
https://github.com/spring-cloud/spring-cloud-gateway/blob/4bd159895bd45193905d652d39a7542c35a5163c/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/support/NameUtils.java#L46-L50
如果您的过滤器名称为SomeGatewayFilterFactory
,则规范化名称为Some
。
您的配置文件将如下例所示。
spring:
cloud:
gateway:
routes:
- id: gateway-server
uri: http://localhost:8081
predicates:
- Path=/**
filters:
- name: Some
args:
KEY1: VALUE1
KEY2: VALUE2
用您的SomeConfig
属性替换键和值。