spring-cloud/spring-cloud-gateway

WebClient Request/Response bug?

Open

#2,839 opened on Jan 11, 2023

View on GitHub
 (5 comments) (0 reactions) (0 assignees)Java (3,204 forks)batch import
enhancementhelp wanted

Repository metrics

Stars
 (4,284 stars)
PR merge metrics
 (Avg merge 2d 2h) (15 merged PRs in 30d)

Description

Describe the bug Enabling WebClientHttpRoutingFilter & WebClientWriteResponseFilter leaves gateway client hanging. I can confirm that downstream HTTP calls works fine (200 OK with String Response), gateway logs also confirm 200 OK, but client is left hanging. Disabling WebClientHttpRoutingFilter & WebClientWriteResponseFilter beans (i.e., using default Netty routing & response handling) works just fine. We'd like to use a custom WebClient hence looking to get WebClientWriteResponseFilter working.

Appreciate any pointers. thanks

Sample

@Configuration
public class GatewayFilterConfig {
    @Bean
    public WebClient webClient() {
        return WebClient.builder().build();
    }

    @Bean
    public CustomWebClientRoutingFilter customWebClientRoutingFilter
            (WebClient webClient, ObjectProvider<List<HttpHeadersFilter>> headersFilters) {
        return new CustomWebClientRoutingFilter(webClient, headersFilters);
    }

    @Bean
    public CustomWebClientResponseFilter customWebClientResponseFilter () {
        return new CustomWebClientResponseFilter();
    }
}
public class CustomWebClientRoutingFilter extends WebClientHttpRoutingFilter {
    public CustomWebClientRoutingFilter(WebClient webClient, ObjectProvider<List<HttpHeadersFilter>> headersFiltersProvider) {
        super(webClient, headersFiltersProvider);
    }

    @Override
    public int getOrder() {
        return Integer.MAX_VALUE - 1; //Run before the NettyRoutingFilter
    }
}
public class CustomWebClientResponseFilter extends WebClientWriteResponseFilter {
    @Override
    public int getOrder() {
        return Integer.MAX_VALUE;
    }
}

Contributor guide