springcloud第4季 springcloud-gateway网关predict案例场景

一  predict案例场景

1.1 说明

本博客所有案例操作,都在上篇博客的基础上进行:

springcloud第4季 springcloud-gateway网关的功能作用_cloud gateway干嘛的-CSDN博客

1.2  案例前提准备

1. 启动zipkin服务

2.启动consul服务

3.启动3个应用服务

二   precdict断言操作案例

2.1  设置时间判断约束

1.配置如下

2.访问

3.修改限制时间

4.再次访问

2.2  断言其他场景

1.设置cookie;

2.设置header属性

3.设置域名

4.设置参数

- #- Cookie=username,zzyy
  # - Header=X-Request-Id, \d+ # 请求头要有X-Request-Id属性并且值为整数的正则表达式
  #- Host=**.atguigu.com
  #- Query=username, \d+  # 要有参数名username并且值还要是整数才能路由
 #- RemoteAddr=192.168.124.1/24 # 外部访问我的IP限制,最大跨度不超过32,目前是1~24它们是 CIDR 表示法。

5.截图如下:

2.3 自定义断言的案例

2.3.1 实现原理

1.新建类名xxx,需要以RoutePredicateFactory结尾,并继承AbstractRoutePredicateFactory类。

2.重写apply方法

3.新建apply方法所需要的静态内部类MyRoutePredicateFactory.Config.

这个Config类就是我们的路由断言规则。

4.从参数构造方法,内部调用super

5.重写apply方法第二版

2.3.2 实施步骤

2.3.2.1 工程配置

1.消费端

2.fegin接口

3.网关

a)自定义过滤断言

package com.jurf.ms.gateway6666.config;

import jakarta.validation.constraints.NotEmpty;
import lombok.Getter;
import lombok.Setter;
import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.server.ServerWebExchange;

import java.util.Collections;
import java.util.List;
import java.util.function.Predicate;

/**
 * @auther zzyy
 * @create 2023-12-31 11:11
 * 需求说明:自定义配置会员等级userTpye,按照钻/金/银和yml配置的会员等级,以适配是否可以访问
 */
@Component
public class MyJurfRoutePredicateFactory extends AbstractRoutePredicateFactory<MyJurfRoutePredicateFactory.Config>
{

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

    //这个Config类就是我们的路由断言规则,重要
    @Validated
    public static class Config
    {
        @Setter@Getter@NotEmpty
        private String cityName; //钻/金/银和yml配置的会员等级
    }

    @Override
    public List<String> shortcutFieldOrder() {
        return Collections.singletonList("cityName");
    }


    @Override
    public Predicate<ServerWebExchange> apply(Config config)
    {
        return new Predicate<ServerWebExchange>()
        {
            @Override
            public boolean test(ServerWebExchange serverWebExchange)
            {
                //检查request的参数里面,userType是否为指定的值,符合配置就通过
                //http://localhost:9527/pay/gateway/get/1?cityName=sz
                String userType = serverWebExchange.getRequest().getQueryParams().getFirst("cityName");
                if (userType == null) {
                    return false;
                }
                //如果说参数存在,就和config的数据进行比较
                if(userType.equalsIgnoreCase(config.getCityName())){
                    return true;
                }
                return false;
            }
        };
    }
}

b)配置文件: key为自定义断言类的前缀,值为请求参数值。

4.提供者

2.3.2.2 工程测试

1.启动consul

2.启动zipkin

3.启动各个服务

4.请求地址:

http://localhost:8081/feign/pay/gateway/zdy/1?cityName=sz

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值