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

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. asp.net知识汇总-页面跳转Server.Transfer和Response.Redirect

    1. Server.Transfer 服务器端跳转 webform1.aspx跳转到webform2.aspx页面 webform1.aspx代码如下: protected void Page_Loa ...

  2. Linux设备驱动程序学习之分配内存

    内核为设备驱动提供了一个统一的内存管理接口,所以模块无需涉及分段和分页等问题. 我已经在第一个scull模块中使用了 kmalloc 和 kfree 来分配和释放内存空间. kmalloc 函数内幕 ...

  3. http文件导出

    using (MemoryStream file = db.ExportExcel(model)) { context.Response.ContentType = "application ...

  4. (转)负载均衡,回话保持,cookie

    servlet操作cookie:http://elf8848.iteye.com/blog/253198 负载均衡,回话保持:http://www.cnblogs.com/qq78292959/arc ...

  5. 蓝桥杯 C/C++参考题目 开平方(数学题,迭代法求开方)

    开平方 如果没有计算器,我们如何求2的平方根?可以先猜测一个数,比如1.5,然后用2除以这个数字.如果我们猜对了,则除法的结果必然与我们猜测的数字相同.我们猜测的越准确,除法的结果与猜测的数字就越接近 ...

  6. 关于C# wpf DataGrid单元格双击设置单元格内容

    1.我是使用了 visual stadio 2015, 用的C# WPF写个工具,但是发现wpf原生没有涉及表格的东西(类似 winform·的DataGridView),所以使用的是toolkit工 ...

  7. Objective-C中的instancetype和id关键字(转)

    转自:Objective-C中的instancetype和id关键字 一.什么是instancetype 同id一样,都是表示未知类型的的对象. 二.关联返回类型(related result typ ...

  8. 【BZOJ1922】[Sdoi2010]大陆争霸 Dijkstra

    Description 具体地说,杰森国有 N 个城市,由 M条单向道 路连接.神谕镇是城市 1而杰森国的首都是城市 N.你只需摧毁位于杰森国首都 的曾·布拉泽大神殿,杰森国的信仰,军队还有一切就都会 ...

  9. iOS xcode6.0使用7.1运行程序 iphone5上下有黑条

    转自:http://stackoverflow.com/questions/25817562/black-bars-appear-in-app-when-targeting-ios7-1-or-7-0 ...

  10. css生成三角形

     转载:http://www.cnblogs.com/lhb25/p/css-and-css3-triangle.html Triangle Up    1 2 3 4 5 6 7 #triangle ...