前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache ZooKeeper - 使用原生的API操作ZK_ACL权限

Apache ZooKeeper - 使用原生的API操作ZK_ACL权限

作者头像
小小工匠
发布2021-08-17 16:20:07
4590
发布2021-08-17 16:20:07
举报
文章被收录于专栏:小工匠聊架构小工匠聊架构

在这里插入图片描述
在这里插入图片描述

Pre

Apache ZooKeeper - ZK的ACL权限控制( Access Control List )

Apache ZooKeeper - 使用原生的API操作ZK_CRUD


Code

创建world模式的节点

代码语言:javascript
复制
package com.artisan.zk.originalClient;

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.data.ACL;
import org.apache.zookeeper.data.Id;
import org.apache.zookeeper.server.auth.DigestAuthenticationProvider;
import org.junit.Test;

import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;


/**
 * @author 小工匠
 * @version 1.0
 * @description: TODO
 * @date 2020/12/1 11:19
 * @mark: show me the code , change the world
 */

@Slf4j
public class AclOperationStanAloneModeTest  extends  StandAloneBaseTest{

    private  static final  String  NODE_NAME = "/artisan-acl-node";


    /**
     * 创建world模式的节点
     */
    @SneakyThrows
    @Test
    public void testCreateNodeWithACL(){

        List<ACL>aclList = new ArrayList<>();
        ACL acl = new ACL();

        Id id = new Id();
        id.setId("anyone");
        id.setScheme("world");

        // 权限
        int perms = ZooDefs.Perms.ADMIN | ZooDefs.Perms.READ ;

        // 绑定
        acl.setId(id);
        acl.setPerms(perms);

        aclList.add(acl);

        String s = getZooKeeper().create(NODE_NAME, "artisan".getBytes(), aclList, CreateMode.PERSISTENT);
        log.info("path {}  created " ,s);
    }
}
在这里插入图片描述
在这里插入图片描述

登录ZK Client查看数据

在这里插入图片描述
在这里插入图片描述

使用授权模式创建节点

代码语言:javascript
复制
  /**
     *
     * 使用授权模式创建节点
     */
    @SneakyThrows
    @Test
    public void createWithAclTest2() {

        String namePWD = "artisan:artisanPWD";
        // 对连接添加授权信息
        getZooKeeper().addAuthInfo("digest",namePWD.getBytes());

        List<ACL> acLList = new ArrayList<ACL>();
        ACL acl = new ACL();

        Id id = new Id();
        id.setId(namePWD);
        id.setScheme("auth");

        int perms = ZooDefs.Perms.ADMIN  |  ZooDefs.Perms.READ |ZooDefs.Perms.WRITE;
        acl.setId(id);
        acl.setPerms(perms);

        acLList.add(acl);

        String s = getZooKeeper().create("/artisanNode2", "artisan".getBytes(), acLList, CreateMode.PERSISTENT);
        log.info("create path: {}",s);
    }
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果要手工查看 可以这儿样

在这里插入图片描述
在这里插入图片描述

如果用代码访问 如下


使用授权模式获取节点数据

代码语言:javascript
复制
   @Test
    public void getDataWithAcl() throws KeeperException, InterruptedException {

        String namePWD = "artisan:artisanPWD";

        // 对连接添加授权信息
        getZooKeeper().addAuthInfo("digest",namePWD.getBytes());


        byte[] data = getZooKeeper().getData("/artisanNode2", false, null);

        log.info("GET_DATA : {}",new String(data));
    }


    public static void main(String[] args) throws NoSuchAlgorithmException {
        String sId = DigestAuthenticationProvider.generateDigest("artisan:artisanPWD");
        System.out.println(sId);
        //  -Dzookeeper.DigestAuthenticationProvider.superDigest=artisan:d3gLrY2XgzvXZbJObw+wiWIQDko=
    }
在这里插入图片描述
在这里插入图片描述

是不是明白了???

本文参与?腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Pre
  • Code
    • 创建world模式的节点
      • 使用授权模式创建节点
        • 使用授权模式获取节点数据
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com