提问者:小点点

如何拦截和验证Spring云网关中所有传入请求的头值?


应用程序的配置文件是:

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个答案

匿名用户

您必须以“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

如果您的过滤器名称是一些GatewayFilterFactory,则规范化名称是一些

您的配置文件将如下例所示。

spring:
  cloud:
    gateway:
      routes:
        - id: gateway-server
          uri: http://localhost:8081
          predicates:
            - Path=/**
          filters:
            - name: Some
              args:
                KEY1: VALUE1
                KEY2: VALUE2

将KEY和VALUE替换为您的一些配置属性。