spring cloud alibaba实现路由断言

作用:用于判断路由是否跳转
实现方式就是:配置+RoutePredicateFactory
一、内置路由断言工厂
二、自定义路由断言工厂
1、新建类

package com.springcloudalibaba.gateway.predicate;

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory;
import org.springframework.cloud.gateway.handler.predicate.GatewayPredicate;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.server.ServerWebExchange;

@Component
public class UserRoutePredicateFactory extends AbstractRoutePredicateFactory {
    public static final String[] KEY_ARRAY = {"minId", "maxId"};// 对象属性
    public UserRoutePredicateFactory() { // 构造函数
        super(UserRoutePredicateFactory.Config.class);
    }
    @Override
    public List shortcutFieldOrder() { // 读取配置文件中的值,赋值到Config对象属性值
        return Arrays.asList(KEY_ARRAY); //顺序注意跟配置一致
    }
    @Override
    public Predicate apply(UserRoutePredicateFactory.Config config) { // 断言逻辑
        return new GatewayPredicate() {
            @Override
            public boolean test(ServerWebExchange exchange) {
                String id = exchange.getRequest().getQueryParams().getFirst("id"); // 得到id参数的值
                if (null != id) { // 判断不为null
                    int numberId = Integer.parseInt(id);
                    if (numberId > config.getMinId() && numberId < config.getMaxId()) { // 判断id是否大于最小值 并且 小于最大值
                        return true; // 返回真
                    }
                }
                return false;
            }
            @Override
            public String toString() { // 重写toString方法
                return String.format("minId: %d , maxId: %d", config.getMinId(), config.getMaxId());
            }
        };
    }
    @Validated
    public static class Config { //配置类,接收配置文件的值
        private Integer minId; // 最小支持查询的id
        private Integer maxId; // 最大支持查询的id
        public void setMinId(Integer minId) {
            this.minId = minId;
        }
        public void setMaxId(Integer maxId) {
            this.maxId = maxId;
        }
        public Integer getMinId() {
            return minId;
        }
        public Integer getMaxId() {
            return maxId;
        }
    }
}

2、在配置文件中

predicates:
	- User=0,1000

你可能感兴趣的:(java,spring,开发语言)