zoukankan      html  css  js  c++  java
  • java zookeeper权限控制ACL(digest,IP)

    java zookeeper权限控制ACL(auth,digest,ip)

    学习前请参考:https://www.cnblogs.com/zwcry/p/10407806.html

    zookeeper权限控制常用的就三种

      1.auth 用户名:密码

        将节点权限改为auth认证,但不加密。每次操作数据需要auth登录认证。

      2.digest 用户名:加密(密码)

        将节点权限改为auth认证,需digest加密(sha1)。每次操作数据需要auth登录认证。

      3.ip 192.168.x.x

        将节点权限改为限定ip访问

      代码只写到digest和ip权限控制,至于auth明文,小朋友们可以手动写下测测。

    ACL.java

    package com.qy.zk;
    
    import java.io.IOException;
    import java.security.NoSuchAlgorithmException;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.zookeeper.KeeperException;
    import org.apache.zookeeper.ZooDefs.Perms;
    import org.apache.zookeeper.ZooKeeper;
    import org.apache.zookeeper.data.ACL;
    import org.apache.zookeeper.data.Id;
    import org.apache.zookeeper.data.Stat;
    import org.apache.zookeeper.server.auth.DigestAuthenticationProvider;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    /**
     * 描述:zookeeper节点访问权限,权限定以后,每次操作数据,需要auth认证登录或在ip限定的客服端访问
     *              代码里也有写到如何auth认证登录 zk.addAuthInfo
     * 作者:七脉
     */
    public class MyZkAcl {
        
        private static final Logger log = LoggerFactory.getLogger(MyZkAcl.class);
        
        public static void main(String[] args) throws IOException, InterruptedException, KeeperException, NoSuchAlgorithmException {
            ZooKeeper zk = MyZkConnect.connect();
            
            /**创建一个节点,再进行测试**/
            //该方法里的权限是 anyone word,crwda
            MyZkConnect.create(zk, "/myacl", "myacl");
            
            /**更改权限控制,指定用户名密码并digest加密**/
            //digestAcL(zk, "/myacl");
            
            /**更改权限控制,限定IP**/
            ipAcL(zk, "/myacl");
        }
        
        /**
         * 描述:将节点权限改为crwda,用户名密码为lry:123456并digest加密
         * 作者:七脉
         * @param zk
         * @param nodePath
         * @return
         * @throws KeeperException
         * @throws InterruptedException
         * @throws NoSuchAlgorithmException
         */
        public static Stat digestAcL(ZooKeeper zk, String nodePath) throws KeeperException, InterruptedException, NoSuchAlgorithmException{
            log.info("准备权限修改节点 {} ACL",nodePath);
            Stat stat = MyZkConnect.queryStat(zk, nodePath);
            List<ACL> acls = new ArrayList<>();
            //scheme 有world/auth/digest/host/ip/
            //zk的digest是通过sha1加密
            String scheme = "digest";
            //定义一个用户名密码为lry:123456
            Id id = new Id(scheme, DigestAuthenticationProvider.generateDigest("lry:123456"));
            ACL acl = new ACL(Perms.ALL, id);
            acls.add(acl);
            //如果修改已经加密的节点,请先按原用户密码认证登录
            //zk.addAuthInfo(scheme, "lry:123456".getBytes());
            Stat newstat = zk.setACL(nodePath, acls, stat.getAversion());
            log.info("完成权限修改节点 {} ACL",nodePath);
            return newstat;
        }
        
        /**
         * 描述:将节点权限改为crwda,并限制指定IP
         * 作者:七脉
         * @param zk
         * @param nodePath
         * @return
         * @throws KeeperException
         * @throws InterruptedException
         * @throws NoSuchAlgorithmException
         */
        public static Stat ipAcL(ZooKeeper zk, String nodePath) throws KeeperException, InterruptedException, NoSuchAlgorithmException{
            log.info("准备权限修改节点 {} ACL",nodePath);
            Stat stat = MyZkConnect.queryStat(zk, nodePath);
            List<ACL> acls = new ArrayList<>();
            //scheme 有world/auth/digest/host/ip/
            //zk的digest是通过sha1加密
            String scheme = "ip";
            //定义权限IP(如果是vm虚拟机,ip为虚拟ip)
            Id id = new Id(scheme, "192.168.159.1");
            ACL acl = new ACL(Perms.ALL, id);
            acls.add(acl);
            //如果修改已经加密的节点,请先按原用户密码认证登录
            //zk.addAuthInfo("digest", "lry:123456".getBytes());
            Stat newstat = zk.setACL(nodePath, acls, stat.getAversion());
            log.info("完成权限修改节点 {} ACL",nodePath);
            return newstat;
        }
    }

    不明白的地方,代码里都有注释。相关的类可以在https://www.cnblogs.com/zwcry/p/10407806.html复制,也可以下载源码

    源码:https://pan.baidu.com/s/1b7gskcRinOFN-ymVfFXhfw

  • 相关阅读:
    Linux系统、版本、CPU、内存查看、硬盘空间
    Spring AOP 通过order来指定顺序
    关于 String.intern() 的思考
    java枚举类型构造方法为什么是private的
    Spring Cache 介绍
    Linux下redis的安装
    使用Spring实现读写分离( MySQL实现主从复制)
    Intellij Idea 13 快捷键(与Eclipse比对)以及基本的设置
    linux下tomcat的shutdown命令杀不死进程
    求N个元素的子集合个数
  • 原文地址:https://www.cnblogs.com/zwcry/p/10414001.html
Copyright © 2011-2022 走看看