【问题标题】:How to get Request header values in Spring Cloud Gateway如何在 Spring Cloud Gateway 中获取请求标头值
【发布时间】:2018-12-18 08:34:54
【问题描述】:

我正在使用 Spring Cloud Gateway 实现 API 路由,在其中一个用例中,我需要从传入请求中获取标头值并将其用于某些处理,进一步将此处理后的值添加到传出(路由)API 调用作为标头.如何从 routeBuilder 中的传入 API 调用中获取标头值?

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder routeBuilder) {
    return routeBuilder.routes()
        .route(r -> r.path("/api/v1/**")
        .setRequestHeader("testKey", "testValue")
        .uri("URL"))
        .build();
}

【问题讨论】:

    标签: spring-boot spring-cloud-gateway


    【解决方案1】:

    从 Predicate 获取传入的请求/响应。

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes().route("default-api-route", new Function<PredicateSpec, Route.AsyncBuilder>() {
            @Override
            public Route.AsyncBuilder apply(PredicateSpec predicateSpec) {
                return predicateSpec.predicate(new Predicate<ServerWebExchange>() {
                    @Override
                    public boolean test(ServerWebExchange serverWebExchange) {
                        // get request header here
                        return false;
                    }
                }).uri("http://httpbin.org").order(10000);
            }
        }).build();
    }        
    

    【讨论】:

      【解决方案2】:

      您可以为此编写自定义过滤器。它只是一种解决方法,不确定这样做的最佳方法是什么:

      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
      
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-11
        • 2021-06-04
        • 2020-05-23
        • 2020-01-14
        • 2020-04-30
        • 2015-11-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多