当前位置: 首页 > 知识库问答 >
问题:

如何在Spring Cloud Gateway中添加特定于路由的自定义过滤器

仲孙善
2023-03-14

所以我对spring cloud gateway是个新手,刚刚开始玩它。我在浏览文档时偶然发现了如何创建自定义过滤器。

https://cloud.spring.io/spring-cloud-gateway/reference/html/#developer-guide

这是我创建自定义过滤器的代码-

       @Component
      public class CustomPreFilterFactory extends AbstractGatewayFilterFactory<CustomPreFilterFactory.Config> {


      public static class Config {
        //Put the configuration properties for your filter here
      }

     @Override
     public GatewayFilter apply(Config config) {

       return (exchange,chain) ->{
        ServerHttpRequest.Builder builder = exchange.getRequest().mutate();
        System.out.println("Request came in custom pre filter");
        return chain.filter(exchange.mutate().request(builder.build()).build());
      };
    }
  }
        @Bean
      public RouteLocator myRoutes(RouteLocatorBuilder routeLocatorBuilder) 
{
      return routeLocatorBuilder.routes()
         .route( p -> p.path("/hello").uri("http://localhost:8081"))
        .build();
}
  1. https://www.javainuse.com/spring/cloud-filter
  2. https://medium.com/@niral22/spring-cloud-gateway-tutorial-5311ddd59816

它们都使用属性而不是使用路由api创建路由。

任何帮助都是非常感谢的。

共有1个答案

曾永新
2023-03-14

这个解决方案对我很有效,我创建了一个OrderedGatewayFilter,使用注入的CustomGatewayFilterFactory创建了一个OrderedGatewayFilter,并将该过滤器添加到路由中:

@Bean
public RouteLocator myRoutes(RouteLocatorBuilder routeLocatorBuilder, CustomGatewayFilterFactory customGatewayFilterFactory) 
{
    OrderedGatewayFilter orderedGatewayFilter =
      new OrderedGatewayFilter(customGatewayFilterFactory.apply(config), 45);
    return routeLocatorBuilder.routes()
         .route( p -> p.path("/hello").uri("http://localhost:8081").filter(orderedGatewayFilter))
        .build();
}
 类似资料:
  • 本文向大家介绍asp.net-mvc 在Mvc中添加自定义路由,包括了asp.net-mvc 在Mvc中添加自定义路由的使用技巧和注意事项,需要的朋友参考一下 示例 用户可以添加自定义路由,将URL映射到控制器中的特定操作。这用于搜索引擎优化目的,并使URL可读。            

  • 我想在定义路线时向路线添加一些自定义数据。 我该怎么做? 比如: 我不希望自定义数据显示在URL中。我只是在内部使用它。

  • 在Swoole::$php->runMVC() 调用之前可以修改默认的路由函数。 Swoole::$php->router(function(){ return array('controller' => 'YourController', 'view' => 'YourView'); }); Swoole::$php->runMVC(); 设置后将使用制定的函数作为路由,路由函数务必要

  • phpGrace 追求极致的效率,我们并不认同在url的基础上继续进行复杂的正则匹配是一种高效的、明智的选择!方便的调用规则比不上轻快的效率!所以我们并不建议您使用复杂的路由规则!尽管如此为了满足开发者的需求和习惯我们还是开放了简单路由!在入口页开启路由配置 <?php define('PG_ROUTE', true);//在框架核心文件引用前定义 include 'phpGrace/phpGra

  • 我希望有一个图像控制器,并允许单endpoint,例如: /图像/上载 这是我目前的做法,但这是正确的做法吗?是否存在某种:none关键字来禁用默认路由?或者我不应该使用资源,用其他的方法去做?

  • 演示在网关追加一个header public class CustomFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { // 演示在网关追加heade