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

  1. package com.qy.zk;
  2.  
  3. import java.io.IOException;
  4. import java.security.NoSuchAlgorithmException;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7.  
  8. import org.apache.zookeeper.KeeperException;
  9. import org.apache.zookeeper.ZooDefs.Perms;
  10. import org.apache.zookeeper.ZooKeeper;
  11. import org.apache.zookeeper.data.ACL;
  12. import org.apache.zookeeper.data.Id;
  13. import org.apache.zookeeper.data.Stat;
  14. import org.apache.zookeeper.server.auth.DigestAuthenticationProvider;
  15. import org.slf4j.Logger;
  16. import org.slf4j.LoggerFactory;
  17.  
  18. /**
  19. * 描述:zookeeper节点访问权限,权限定以后,每次操作数据,需要auth认证登录或在ip限定的客服端访问
  20. * 代码里也有写到如何auth认证登录 zk.addAuthInfo
  21. * 作者:七脉
  22. */
  23. public class MyZkAcl {
  24.  
  25. private static final Logger log = LoggerFactory.getLogger(MyZkAcl.class);
  26.  
  27. public static void main(String[] args) throws IOException, InterruptedException, KeeperException, NoSuchAlgorithmException {
  28. ZooKeeper zk = MyZkConnect.connect();
  29.  
  30. /**创建一个节点,再进行测试**/
  31. //该方法里的权限是 anyone word,crwda
  32. MyZkConnect.create(zk, "/myacl", "myacl");
  33.  
  34. /**更改权限控制,指定用户名密码并digest加密**/
  35. //digestAcL(zk, "/myacl");
  36.  
  37. /**更改权限控制,限定IP**/
  38. ipAcL(zk, "/myacl");
  39. }
  40.  
  41. /**
  42. * 描述:将节点权限改为crwda,用户名密码为lry:123456并digest加密
  43. * 作者:七脉
  44. * @param zk
  45. * @param nodePath
  46. * @return
  47. * @throws KeeperException
  48. * @throws InterruptedException
  49. * @throws NoSuchAlgorithmException
  50. */
  51. public static Stat digestAcL(ZooKeeper zk, String nodePath) throws KeeperException, InterruptedException, NoSuchAlgorithmException{
  52. log.info("准备权限修改节点 {} ACL",nodePath);
  53. Stat stat = MyZkConnect.queryStat(zk, nodePath);
  54. List<ACL> acls = new ArrayList<>();
  55. //scheme 有world/auth/digest/host/ip/
  56. //zk的digest是通过sha1加密
  57. String scheme = "digest";
  58. //定义一个用户名密码为lry:123456
  59. Id id = new Id(scheme, DigestAuthenticationProvider.generateDigest("lry:123456"));
  60. ACL acl = new ACL(Perms.ALL, id);
  61. acls.add(acl);
  62. //如果修改已经加密的节点,请先按原用户密码认证登录
  63. //zk.addAuthInfo(scheme, "lry:123456".getBytes());
  64. Stat newstat = zk.setACL(nodePath, acls, stat.getAversion());
  65. log.info("完成权限修改节点 {} ACL",nodePath);
  66. return newstat;
  67. }
  68.  
  69. /**
  70. * 描述:将节点权限改为crwda,并限制指定IP
  71. * 作者:七脉
  72. * @param zk
  73. * @param nodePath
  74. * @return
  75. * @throws KeeperException
  76. * @throws InterruptedException
  77. * @throws NoSuchAlgorithmException
  78. */
  79. public static Stat ipAcL(ZooKeeper zk, String nodePath) throws KeeperException, InterruptedException, NoSuchAlgorithmException{
  80. log.info("准备权限修改节点 {} ACL",nodePath);
  81. Stat stat = MyZkConnect.queryStat(zk, nodePath);
  82. List<ACL> acls = new ArrayList<>();
  83. //scheme 有world/auth/digest/host/ip/
  84. //zk的digest是通过sha1加密
  85. String scheme = "ip";
  86. //定义权限IP(如果是vm虚拟机,ip为虚拟ip)
  87. Id id = new Id(scheme, "192.168.159.1");
  88. ACL acl = new ACL(Perms.ALL, id);
  89. acls.add(acl);
  90. //如果修改已经加密的节点,请先按原用户密码认证登录
  91. //zk.addAuthInfo("digest", "lry:123456".getBytes());
  92. Stat newstat = zk.setACL(nodePath, acls, stat.getAversion());
  93. log.info("完成权限修改节点 {} ACL",nodePath);
  94. return newstat;
  95. }
  96. }

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

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

java zookeeper权限控制ACL(digest,IP)的更多相关文章

  1. 论Java访问权限控制的重要性

    人在什么面前最容易失去抵抗力? 美色,算是一个,比如说西施的贡献薄就是忍辱负重.以身报国.助越灭吴:金钱,算是另外一个,我们古人常说“钱乃身外之物,生不带来死不带去”,但我们又都知道“有钱能使鬼推磨” ...

  2. 【分布式】ZooKeeper权限控制之ACL(Access Control List)访问控制列表

    zk做为分布式架构中的重要中间件,通常会在上面以节点的方式存储一些关键信息,默认情况下,所有应用都可以读写任何节点,在复杂的应用中,这不太安全,ZK通过ACL机制来解决访问权限问题,详见官网文档:ht ...

  3. [THINKING IN JAVA]访问权限控制

    6 访问权限控制 6.1 包:库单元 package.import.import *.import static: 修改classpath环境变量可以将自己写的类库添加至环境变量并在任何java程序中 ...

  4. JAVA访问权限控制[zhuan]

    Java的访问权限控制修饰符,从最大权限到最小权限依次是:public.protected.包访问权限(默认,没有关键字)和private.对于类的访问权限只能是:public和包访问权限(但内部类可 ...

  5. Java访问权限控制

    访问权限控制           java提供了访问权限修饰词,以供类库开发人员向客户端程序员指明哪些是可用的,哪些是不可用的.访问权限控制的等级,从最大权限到最小权限依次是:public.prote ...

  6. Java 访问权限控制:你真的了解 protected 关键字吗?

    摘要: 对于类的成员而言,其能否被其他类所访问,取决于该成员的修饰词:而对于一个类而言,其能否被其他类所访问,也取决于该类的修饰词.在Java中,类成员访问权限修饰词有四类:private,无(包访问 ...

  7. Java 访问权限控制 小结

    总所周知,Java提供了访问权限修饰词,以供类库开发人员向客户端程序员指明哪些是可用的,哪些是不可用的. 访问权限控制的等级,从最大权限到最小权限依次为:public.protected.包访问权限( ...

  8. java 访问权限控制

    java提供四种访问权限: public > protected > 包访问权限(无关键词) > private 包:库单元 对于包访问权限,一个包内的都可以访问. 在eclipse ...

  9. Linux中权限控制ACL命令

    很多小伙伴觉得,Linux的权限管理命令不就是chown和chmod命令吗,什么时候有了ACL了? 什么是ACLACL是访问控制列表(Access Control List)的缩写,主要的目的是在提供 ...

随机推荐

  1. oracle锁一些知识

    表级锁共具有五种模式,如下所示. 行级排他锁(Row Exclusive,简称RX锁) 当我们进行DML时会自动在被更新的表上添加RX锁,或者也可以通过执行lock命令显式的在表上添加RX锁.在该锁定 ...

  2. boost - 正则表达式xpressive

     正则表达式是一套处理文本强有力的工具: 它使用一套复杂的语法规则,可以解决文本处理领域的绝大多数问题; 而这些问题通常是字符串算法很难甚至无法解决的. C++98标准中没有内置的正则表达式支持,使得 ...

  3. linux软件的安装和卸载

    http://blog.chinaunix.net/uid-25572546-id-1995028.html

  4. Machine Learning Yearning - Andrew NG

    链接(1~12章): https://gallery.mailchimp.com/dc3a7ef4d750c0abfc19202a3/files/Machine_Learning_Yearning_V ...

  5. 性能测试:压测中TPS上不去的几种原因分析(就是思路要说清楚)

    转https://www.cnblogs.com/imyalost/p/8309468.html 先来解释下什么叫TPS: TPS(Transaction Per Second):每秒事务数,指服务器 ...

  6. iOS开发之--storyboary下,为btn/lab/view等添加裁剪和阴影的方法

    在开发过程中,很多时候我们都需要定制一个控件的属性,比如边框.阴影.圆角裁剪等,使用代码创建控件的时候,我们都知道,直接对layer图层进行各种属性的操作, self.button.layer.cor ...

  7. boost::interprocess::managed_shared_memory(2)(std::string)

    #include <iostream> #include <boost/interprocess/managed_shared_memory.hpp> #include < ...

  8. XML 解析之 jaxp 解析器

    XML 的解析方式有两种方式: DOM 解析和 SAX 解析. DOM 解析: 根据 XML 的层级结构, 在内存中分配一个树形结构, 把 XML 的标签, 属性和文本都封装成对象. 优点: 可以实现 ...

  9. 转!!ftp的主动模式(port)与被动模式(PASV)

    转自 http://www.phpweblog.net/killjin/archive/2008/01/06/2653.html   ftp中主动模式(port)与被动模式(PASV) 目录 开场白 ...

  10. 阻塞IO 非阻塞IO 异步IO

    阻塞IO 一般表现为 进程/线程 调用IO操作后就一直死循环等待,直至IO操作结束,返回IO结果 非阻塞IO 一般表现为 进程/线程 调用IO操作后,可以先去干别的事情,但是每隔一段时间,回去询问一下 ...