自定义断言工厂类
DemoRoutePredicateFactory
package com.learning.springcloud.custom;
import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory;
import org.springframework.cloud.gateway.handler.predicate.GatewayPredicate;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.server.ServerWebExchange;
import java.util.function.Predicate;
public class DemoRoutePredicateFactory extends AbstractRoutePredicateFactory {
public DemoRoutePredicateFactory() {
public Predicate apply(Config config) {
return new GatewayPredicate() {
public boolean test(ServerWebExchange exchange) {
if ("YES".equals(config.getName())) {
public List shortcutFieldOrder() {
return Arrays.asList("name");
public static class Config {
public String getName() {
public void setName(String name) {
路由配置说明
server-addr: 127.0.0.1:8847
- id: order_route # 路由唯一标识
- StripPrefix=1 # 转发去掉第一层路径
访问效果
实现说明
- 命名必须需要以 RoutePredicateFactory 结尾
- 继承 AbstractRoutePredicateFactory 类
- 必须为spring的组件bean(@Component)
- 必须要有内部类 Config 以及 对应的 shortcutFieldOrder 方法
- 重写 apply 方法的逻辑
- 可通过 exchange.getRequest() 获取到ServerHttpRequest对象
- 从而获取到请求的参数、请求方式、请求头等信息