我像这样创建了我的 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 文件中,例如
提前致谢
答案 0 :(得分:0)
如果你想要文件中的路由,为什么不使用spring cloud gateway提供的Path Route谓词 - https://cloud.spring.io/spring-cloud-gateway/reference/html/#the-path-route-predicate-factory
那里也有大量过滤器可以更改请求和响应。
要更改未提供 Spring 提供的过滤器的路由的请求和响应,您可以创建自己的自定义过滤器 - GlobalFilter
或 GatewayFilters
。有关如何实现的参考,您可以查看 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 中看到的路线。