若是有看我这些笔记的人可能会以为我应该讲讲dubbo-admin项目对提供者和消费者的服务调用控制了,但我以为dubbo-admin这个东西部署起来很简单,不过里面确实也有一些bug,后面有时间给你们讲讲我碰到的bug,不过你们有没有发现咱们前面讲的dubbo是很容易由于暴露服务,而被随意消费者调用。如今我介绍一种经过zookeeper的ACL的权限控制来实现dubbo服务的权限控制。java
首先,zookeeper必须做为注册中心,zookeeper能够理解为一个数据库,咱们前几节说的那些例子,在zookeeper没有加任何权限的状况下,是能够被随意的zookeeper客户端删除的。dubbo服务默认都是注册在zookeeper的一个/dubbo目录下,咱们须要对这个目录进行受权,才能保证数据不会随意被删除。数据库
如何受权呢,咱们能够在zookeeper客户端用以下命令对/dubbo目录授予crw权限:apache
1)增长一个认证用户 addauth digest 用户名:密码明文 eg. addauth digest srp:srp 2)设置权限 setAcl /path auth:用户名:密码明文:权限 eg. setAcl /dubbo auth:srp:srp:crw
这么目录若是没有密码就不会随意被zk客户端给修改,删除,dubbo要调用时要加以下配置,不然没有权限调用,在dubbo-provider.xml作以下修改:ide
<dubbo:registry protocol="zookeeper" address="${dubbo.registry.address}" username="srp" password="srp" client="curator"/>
其中username和password对应上的zk客户端上的用户名,密码, client="curator"我是改了zookeeper的java客户端,以前我调试不少次dubbo自带的zk客户端,并无成功调用,网上也说dubbo自带的zk客户端太老旧,很差用。.net
要调用这个客户端须要在pom.xml加上以下引用:调试
<dependency> <groupId>com.netflix.curator</groupId> <artifactId>curator-framework</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.5.0</version> </dependency>
总体配置完就能够运行了,若是权限有问题,会提示以下错误:code
至于username和password最终会传到xml
com.alibaba.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient里面,具体位置是:rem