Spring Cloud Gateway自定义路由断言工厂

SpringCloud视频教程:

SpringCloud快速入门-学习视频教程-腾讯课堂

个人博客纯净版

Spring Cloud Gateway自定义路由断言工厂 | 代码搬运工

自定义路由断言工厂需要继承 AbstractRoutePredicateFactory 类,重写 apply 方法的逻辑和shortcutFieldOrder方法。

在 apply 方法中可以通过 exchange.getRequest() 拿到 ServerHttpRequest 对象,从而可以获取到请求的参数、请求方式、请求头等信息。

apply 方法的参数是自定义的配置类,在使用的时候配置参数,在 apply 方法中直接获取使用。

命名需要以 RoutePredicateFactory 结尾,比如 CheckAuthRoutePredicateFactory,那么在使用的时候 CheckAuth 就是这个路由断言工厂的名称。代码如下所示。

@Slf4j @Component public class CheckAuthRoutePredicateFactory extends AbstractRoutePredicateFactory<CheckAuthRoutePredicateFactory.Config> {       public CheckAuthRoutePredicateFactory() {         super(Config.class);         log.info("Loaded RoutePredicateFactory [CheckAuth]");     }      @Override     public List<String> shortcutFieldOrder() {         return Arrays.asList("name");     }       @Override     public Predicate<ServerWebExchange> apply(Config config) {          return exchange -> {             if (config.getName().equals("zhangsan")) {                 return true;             }             return false;         };     }       public static class Config {          private String name;          public void setName(String name) {             this.name = name;         }          public String getName() {             return name;         }     }  }  

在application.yml中添加路由配置,如下:

spring:   cloud:     gateway:       routes:       - id: customer_route         predicates:         - CheckAuth=zhangsan         uri: http://51ufo.cn 

本文代码git地址 springcloud-lesson: springcloud课程源码