spring cloud gateway - 创建动态java路由

时间:2021-07-23 22:42:58

标签: spring-cloud-gateway

我像这样创建了我的 bean:

@Bean
public RouteLocator routes(RouteLocatorBuilder builder, LoggingGatewayFilterFactory loggingFactory) {
    return builder.routes()
            .route("configuracionApp",
                    r -> r.path("/configuracion")
                    .and().readBody(String.class, requestBody -> true)
                    .filters(
                            f -> f
                            .filter(loggingFactory.apply(new Config("My Custom Message", true, true)))
                            .modifyResponseBody(String.class, String.class, bodyRewrite)
                            )
                    .uri("lb://msapp")
                    )
            .route("configuracionHorario",
                    r -> r.path("/configuracion/horario")
                    .filters(
                            f -> f
                            .filter(loggingFactory.apply(new Config("My Custom Message", true, true)))
                            .modifyResponseBody(String.class, String.class, bodyRewrite)
                            )
                    .uri("lb://msapp")
                    )
            .build();
}

一切都很完美,我唯一的疑问是我是否可以从列表中创建这些路由,并将该列表保存在 yml 文件中,例如

提前致谢

1 个答案:

答案 0 :(得分:0)

如果你想要文件中的路由,为什么不使用spring cloud gateway提供的Path Route谓词 - https://cloud.spring.io/spring-cloud-gateway/reference/html/#the-path-route-predicate-factory

那里也有大量过滤器可以更改请求和响应。

要更改未提供 Spring 提供的过滤器的路由的请求和响应,您可以创建自己的自定义过滤器 - GlobalFilterGatewayFilters。有关如何实现的参考,您可以查看 their repo(例如,他们是如何实现 AddRequestHeader 过滤器的)。

虽然全局过滤器适用于所有路由。网关过滤器可以映射到特定的过滤器。例如,如果您创建了一个名为 MyCustomFilter 的自定义过滤器,并且您希望它仅应用于 /foo/* 请求中,您可以执行以下操作:

spring:
  cloud:
    gateway:
      routes:
      - id: 
        uri: https://example.org # or lb://my-service
        predicates:
        - Path=/foo/**
        filters:
        - MyCustomFilter

要检查哪些过滤器应用于您可以在 actuator gateway routes 中看到的路线。