目录
令牌验证
- 使用场景
- 防止消费者绕过注册中心访问提供者
- 在注册中心控制权限,以决定要不要下发令牌给消费者
- 注册中心可灵活改变授权方式,而不需要修改或升级提供者
(1)全局设置开启令牌验证
<!--随机token令牌,使用UUID生成-->
<dubbo:provider interface="com.foo.BarService" token="true" />
<!--固定token令牌,相当于密码-->
<dubbo:provider interface="com.foo.BarService" token="123456" />
(2)服务级别设置
<dubbo:service interface="com.foo.BarService" token="true" />
<dubbo:service interface="com.foo.BarService" token="123456" />
(3)协议级别设置
<dubbo:protocol name="dubbo" token="true" />
<dubbo:protocol name="dubbo" token="123456" />
路由规则
- 2.20以上版本支持
(1)向注册中心写入路由规则:(通常由监控中心或治理中心的页面完成)
RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://1.1.1.1:111"));
registry.register(URL.valueOf("condition://0.0.0.0/com.foo.BarService?catagory=routers&dynamic=false&rule=" + URL.encode("host = 1.1.1.10 => host = 1.1.1.11") + "));
条件路由规则
- 示例
#排除预发布机
=> host != 172.22.3.91
#白名单(一个服务只能有一条白名单规则,否则两条规则交叉,就都被筛选掉了)
host != 172.22.3.91,172.22.3.92 =>
#黑名单
hsot = 172.22.3.91,172.22.3.92 =>
#服务寄宿在应用上,只暴露一部分的机器,防止整个集群挂掉
=> host = 172.22.3,1*,172.22.3.2*
#为重要应用提供额外的机器
application != kylin => host != 172.22.3.91,172.22.3.92
#读写分离
method = find*,list*,get*,is* => host = 172.22.3.91,172.22.3.92
method != find*,list*,get*,is* => host = 172.22.3.93,172.22.3.94
#前后台分离
application = bops => host = 172.22.3.91,172.22.3.92
application != bops => host = 172.22.3.93,172.22.3.94
#隔离不同机房网段
host != 172.22.3.* => host != 172.22.3.*
#提供者与消费者部署在同集群内,本机只访问本机的服务
=> host = $host
脚本路由规则
支持JDK脚本引擎的所有脚本,比如:javascript,jruby,groovy等,通过type=javascript参数设置脚本类型,缺省为javascript。脚本没有沙箱约束,可执行任意代码,存在后门风险。