SpringCloud-Gateway高级应用及解析

   

目录

一、自定义断言工厂

二、自定义过滤器

 1.自定义GatewayFilter

2.自定义GlobalFilter

二、Gateway源码剖析


     Gateway作为SpringCloud体系中的网关,可以用来进行鉴权,安全控制,日志统一处理,易于监控,限流等。

一、自定义断言工厂

        Gateway官方给我们能提供了很多种断言的方式,比如说通过路径、请求方法、Cookie等等一系列的断言方式,我们可以参考一下官方的写法,然后就可以写出我们自己需要断言方式。

        首先我们来到AbstractRoutePredicateFactory,这是断言父类接口的抽象实现类,因为我们需要自己定义断言的条件,所以在yml中解析到的参数会放到一个配置类当中,那这个构造方法其实就是将定义的配置类传到上面,这个抽象类的实现类其实就是各种断言工厂

         首先我们定义一个类叫AccessTokenRoutePredicateFactory,因为遵循着约定大于配置的思想,所以我们在yml中配置的就会是 - AccessToken 开头的,并且我们需要继承AbstractRoutePredicateFactory并重写它的几个方法即可,下面是完整的代码

@Slf4j
@Component
public class AccessTokenRoutePredicateFactory extends AbstractRoutePredicateFactory<AccessTokenRoutePredicateFactory.Config> {
    private static final String Name = "headerName";
    private static final String Value = "value";

    public AccessTokenRoutePredicateFactory() {
        super(Config.class);
    }

    @Override
    public Predicate<ServerWebExchange> apply(Config config) {
        return new Predicate<ServerWebExchange>() {
            @Override
            public boolean test(ServerWebExchange exchange) {
                HttpHeaders headers = exchange.getRequest().getHeaders();
                List<String> list = headers.getOrDefault(config.headerName, Collections.emptyList());
                if(list.size() != 1){
                    return false;
                }
                String value = list.get(0);
                return value.equalsIgnoreCase(config.getValue());
            }
        };
    }

    @Override
    public ShortcutType shortcutType() {
        return Shortc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值