slipperySoap 2022-02-19 21:27 采纳率: 88.9%
浏览 360
已结题

Gateway如何使用配置类重写路由转发路径

问题遇到的现象和发生背景

网上查了很多,都是基本使用的配置文件来实现,能否用配置类来实现?

spring:
  application:
    name: gateway
  cloud:
    gateway:
      routes:
        - id: product
          uri: lb://product # lb代表从注册中心获取服务
          predicates:
            - Path=/product-service/**
          filters: 
            - RewritePath=/product-service/(?<segment>.*), /$\{segment}

通过RewritePath配置重写转发的url,将/product-service/(?.*),重写为{segment},然后转发到订单微服务。比如在网页上请求http://localhost:8080/product-service/product/1,此时会将请求转发到http://127.0.0.1:9002/product/1( 值得注意的是在yml文档中 $ 要写成 $\ )
原文链接:https://blog.csdn.net/qq_41347385/article/details/106528642

我想要达到的结果
@Configuration
public class GateWayConfig {
    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder) {

        RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();

        routes.route("routh_1",
                r -> r.path("/product-service/**")
                        .uri("lb://system")).filter(???);  // 此处应该怎么写来重写路径
        return routes.build();
    }

}
@Component
@Order(90)
public class WebFluxFilter implements WebFilter {

    @Override
    public @NotNull Mono<Void> filter(ServerWebExchange exchange, @NotNull WebFilterChain chain) {

       // 此处应该怎么写来重写路径
       // ... ???
       return chain.filter(exchange);
        

    }
}

如何在过滤器中编写,可以使得最终转发的路由也改变,
比如默认gateway请求localhost:9090/hello转发到localhost:7070/hello
现在如何设置好后,
可以使得localhost:9090/hello转发到localhost:7070/very/good

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 2月27日
    • 修改了问题 2月19日
    • 创建了问题 2月19日

    悬赏问题

    • ¥15 Apache显示系统错误3该如何解决?
    • ¥30 uniapp小程序苹果手机加载gif图片不显示动效?
    • ¥20 js怎么实现跨域问题
    • ¥15 C++dll二次开发,C#调用
    • ¥15 请教,如何使用C#加载本地摄像头进行逐帧推流
    • ¥15 Python easyocr无法顺利执行,如何解决?
    • ¥15 为什么会突然npm err!啊
    • ¥15 java服务连接es读取列表数据,服务连接本地es获取数据时的速度很快,但是换成远端的es就会非常慢,这是为什么呢
    • ¥15 vxworks交叉编译gcc报错error: missing binary operator before token "("
    • ¥15 JSzip压缩文件时如何设置解压缩密码