若是有看我這些筆記的人可能會以爲我應該講講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