Spring云网关如何添加前置过滤器

时间:2021-04-21 15:32:43

标签: spring-boot spring-cloud spring-cloud-gateway

我正在使用 spring cloud gateway 将请求路由到我的下游应用程序 我有路由器定义如下

@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();
    }

}

路由工作正常,现在我需要添加一个前置过滤器,它可以做一些前置条件并获取路由路径。但不知道如何动态更改 uri .uri("http://localhost:8081/test")

下面是我在 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 
        };
    }
    
}

所以我需要从传入路径 /user/test/** 转发到 http://localhost:8081/test1 或 http://localhost:8081 /test2 基于我的自定义过滤器中的数据库查找返回

1 个答案:

答案 0 :(得分:1)

我相信你基本上是在改变路径,所以你可以以this的方式做到这一点。

根据你从数据库中得到的值,设置路径。