如何在Spring Cloud Gateway中拦截和验证所有传入请求的标头值?

时间:2019-08-02 17:37:28

标签: spring-cloud-gateway

该应用程序的

配置文件为:

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
    }

我的要求是先验证在每个传入请求中传递的标头值,然后再传递给下游。

1 个答案:

答案 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属性替换键和值。