Zookeeper 内建ACL访问控制权限代码

本文详细解析了ZooKeeper中基于用户名密码的digest模式、world auth模式、ip模式等ACL机制,包括如何配置用户认证、创建不同权限的节点以及设置访问权限列表。通过实际代码示例展示了如何在ZooKeeper中实现灵活的权限控制。

这里我只用了基于用户名密码的digest 模式,还有world  auth  ip 三种模式

ZooKeeper有下列内建模式:

  • world  有独立id,anyone,代表任何用户。

  • auth 不使用任何id,代表任何已经认证过的用户

  • digest 之前使用了格式为username:pathasowrd的字符串来生成一个MD5哈希表作为ACL ID标识。在空文档中发送username:password来完成认证。现在的ACL表达式格式为username:base64, 用SHA1编码密码。

  • ip 用客户端的ip作为ACL ID标识。ACL表达式的格式为addr/bits,addr中最有效的位匹配上主机ip最有效的位。

    可以根据自己的需要自己进行选择使用

@Test
	public void test() throws IOException, InterruptedException, KeeperException, NoSuchAlgorithmException {

		/**
		 * 连接zookeeper
		 */
			zk = new ZooKeeper("localhost:2182", 5000, new Watcher() {
				public void process(WatchedEvent event) {
					if (event.getType() == EventType.NodeChildrenChanged && ("/" + groupNode).equals(event.getPath())) {
						try {
							System.out.println("此处监听");
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				}
			});
			while(zk.getState() != ZooKeeper.States.CONNECTED ){
				Thread.sleep(3000);
			}
			//zk链接的用户
			zk.addAuthInfo("digest", "admin:admin123".getBytes());
			//创建开放节点,允许任意操作
			zk.create("/xxx", "xxx".getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
			//创建只读节点
			zk.create("/yyy", "yyy".getBytes("utf-8"), Ids.READ_ACL_UNSAFE, CreateMode.PERSISTENT);
			//创建者全部权限
			zk.create("/zzzs", "zzz".getBytes("utf-8"), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);

			//设置访问权限列表
			List<ACL> lists = new ArrayList<ACL>();
			Id id1 = new Id("digest", DigestAuthenticationProvider.generateDigest("admin:admin123"));
			Id id3 = new Id("digest", DigestAuthenticationProvider.generateDigest("readadmin:admin123"));
			lists.add(new ACL(ZooDefs.Perms.CREATE,id1));  //创建权限
			lists.add(new ACL(ZooDefs.Perms.READ,id3));	   //只读权限 
			//testa 节点将根据权限列表进行acl
			zk.create("/testa", "testacl".getBytes("utf-8"), lists, CreateMode.PERSISTENT);
			
			
			byte[] value = zk.getData("/testa", null, new Stat()); 
			System.out.println(value);
			
			
	}



转载于:https://my.oschina.net/UpBoy/blog/420115

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值