Search code examples
spring-bootspring-cloudspring-cloud-gateway

How to add Pre Filter in Spring cloud gateway


I am using spring cloud gateway to route request to my downstream application I have the router defined something like below

@Configuration
public class SpringCloudConfig {

    @Bean
    public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(r -> r.path("/user/test/**")
                        .uri("http://localhost:8081/test")
                        .id("testModule"))
                .build();
    }

}

Routing works fine, now I need to add a prefilter which can do some pre-condition and get routing path. but not getting how to change uri dynamically .uri("http://localhost:8081/test")

Below is the code I am trying for out in preFilter.

   @Component
public class testPreFilter extends AbstractGatewayFilterFactory {

    
    @Override
    public GatewayFilter apply(Config config) {
        System.out.println("inside testPreFilter.apply method");
        
        return (exchange, chain) -> {
         //get headers and do lookup for URI in mapping DB 

          **//If contains return modify the uri** 
            return chain.filter(exchange.mutate().request(request).build());
          //else 401 
        };
    }
    
}

so I need to forward from incoming path /user/test/** to http://localhost:8081/test1 or http://localhost:8081/test2 based on db lookup return in my custom filter


Solution

  • You are basically changing the path I believe , so you can do that in this fashion .

    Based on the value you get from the database , set the path .