ZooKeeper-ACL-权限管理机制

权限管理ACL(Access Control List)

Zookeeper的权限

CREATE: 能创建子节点
READ:能获取节点数据和列出其子节点
WRITE: 能设置节点数据
DELETE: 能删除子节点
ADMIN: 能设置权限

zookeeper的认证方式

world:默认方式,相当于全世界都能访问
auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)
digest:即用户名:密码这种方式认证,这也是业务系统中最常用的
ip:使用Ip地址认证

JAVA Client

原生API
Curator
ZkClient

ACL认证案例-原生API

String testNode = "/test";
        String zookeeperAddress = "10.21.51.243:2181,10.21.49.252:2181,10.21.50.241:2181";
        System.out.println(zookeeperAddress);

        /**
         * 建立连接
         */
        ZooKeeper zk = new ZooKeeper(zookeeperAddress, 3000, new Watcher() {
            // 监控所有被触发的事件
            @Override
            public void process(WatchedEvent event) {
                System.out.println(event.toString());
            }
        });
        System.out.println("OK!");

        /**
         * schema
         * 设置认证
         *
         * world	只有一个用户:anyone,代表所有人(默认)
         * ip	    使用IP地址认证
         * auth	    使用已添加认证的用户认证
         * digest	使用“用户名:密码”方式认证
         */
        zk.addAuthInfo("digest", "admin:admin".getBytes());
        zk.addAuthInfo("digest", "abc:abc".getBytes());

        /**
         * 判断节点是否存在
         */
        if (zk.exists(testNode, true) == null) {
            /**
             *设置认证方式
             */
            Id ADMIN_IDS = new Id("digest", DigestAuthenticationProvider.generateDigest("admin:admin"));
            Id USER_IDS = new Id("digest", DigestAuthenticationProvider.generateDigest("abc:abc"));
            Id ANYONE_ID_UNSAFE = ZooDefs.Ids.ANYONE_ID_UNSAFE;

            /**
             *设置ACL权限
             *Create  允许对子节点Create 操作
             *Read    允许对本节点GetChildren 和GetData 操作
             *Write   允许对本节点SetData 操作
             *Delete  允许对子节点Delete 操作(本节点也可以删除)
             *Admin   允许对本节点setAcl 操作
             *ALL = READ | WRITE | CREATE | DELETE | ADMIN;
             */
            List<ACL> aclList = new ArrayList<>();
            aclList.add(new ACL(ZooDefs.Perms.ADMIN, ADMIN_IDS));
            aclList.add(new ACL(ZooDefs.Perms.CREATE | ZooDefs.Perms.READ | ZooDefs.Perms.WRITE | ZooDefs.Perms.DELETE, USER_IDS));
            aclList.add(new ACL(ZooDefs.Perms.READ, ANYONE_ID_UNSAFE));

            /**
             * 创建根节点
             */
            zk.create(testNode, "0".getBytes(), aclList, CreateMode.PERSISTENT);
        }

        /**
         * 查看ACL权限
         */
        if (zk.exists(testNode, true) != null) {
            List<ACL> craneAcl = zk.getACL(testNode, new Stat());
            System.out.println(craneAcl);
        }

        System.out.println("所有的节点");
        System.out.println(zk.getChildren("/", false));

参考

https://www.cnblogs.com/yjmyzz/p/zookeeper-acl-demo.html
https://blog.csdn.net/liuxiao723846/article/details/79391650
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值