在Zookeeper客户端(一)—— 原生客户端中我们主要介绍了使用Zookeeper客户端对节点的增删改查等操作,但是别忘了还有ACL权限控制,这里我们就再来看一看在Zookeeper客户端中,我们是如何使用ACL权限控制的。
首先我们需要先连接我们的服务端,这里和之前类似,有一点不同的是,这里我们没有直接在Zookeeper连接的时候使用匿名内部类,而是让测试类继承了Watch接口,如下:
public class ZookeeperAclTest implements Watcher{
public static final String CONNECT_ADDR = "192.168.80.130:2181";
public static CountDownLatch countDownLatch = new CountDownLatch(1);
public static void main(String[] args) throws Exception {
ZooKeeper zooKeeper = new ZooKeeper(CONNECT_ADDR, 5000, new ZookeeperAclTest());
countDownLatch.await();
}
@Override
public void process(WatchedEvent event) {
if(event.getState() == Event.KeeperState.SyncConnected){
countDownLatch.countDown();
}
}
}
连接完成后,我们就可以进行ACL权限控制,如下我们添加了两个权限,然后再创建节点的时候赋予了权限控制
另外对于已有的节点,我们也是可以添加相关权限的,这里我们给一个已经存在的 /node2 添加了权限,然后再去打印出其权限,如下:
我们进行访问时,发现提示我们没有权限,是的,我们给 /node2 节点添加了权限,我们在访问时就必须先给当前会话注册授权信息,然后再进行访问。
注意的是,这里我们可以把setAcl
命令注释,因为我们刚刚已经给节点 /node2 赋予了权限,这里我们在进行赋予权限肯定是没有权限的;或者我们把添加会话授权的信息放在最上面也是可以的