Как получить значения заголовка запроса в Spring Cloud Gateway

Я реализую маршрутизацию API с использованием облачного шлюза Spring, в одном из случаев использования мне нужно получить значение заголовка из входящего запроса и использовать его для некоторой обработки, а затем добавить это обработанное значение в исходящий (маршрутизируемый) вызов API в качестве заголовка. Как получить значение заголовка из входящего вызова API в routeBuilder?

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

person TechSeeker    schedule 10.07.2018    source источник


Ответы (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

    }

}
person Arpan Das    schedule 16.07.2018

Получить входящий запрос / ответ от 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();
}        
person Rick Gong    schedule 21.09.2020