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. The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Cha

    The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Cha ...

  2. 图像特征点匹配C代码

    #include "opencv2/core/core.hpp" #include "highgui.h" #include "opencv2/img ...

  3. MVC [Control与View交互]

    <1> Home控制器 using System; using System.Collections.Generic; using System.Data; using System.Da ...

  4. 《JavaScript高级程序设计》读书笔记1--HTTP头部信息

    优秀的书籍常读常新 ----------------------------------------- 在发送XHR请求的同时,还会发送如下头部信息: --Accept: 浏览器能够处理的内容类型 - ...

  5. 拨打电话<a href="tel:">跳转到邮件<a href="mailto:">

    拨打电话 <a href="tel:0571866000">0571-866000</a> 跳转到邮件 <a href="mailto:jo ...

  6. 常用的mysql语句

    为了方便学习mysql,把接触到的sql收集一下,忘记的时候可以查询一下. 连接mysql数据库: mysql -u 用户名 -p 输入密码. 创建数据库: create database 数据库名; ...

  7. XP系统中IIS访问无法显示网页,目前访问网站的用户过多。终极解决办法

    无法显示网页 目前访问网站的用户过多. -------------------------------------------------------------------------------- ...

  8. 利用kubeadm部署kubernetes 1.7 with flannel

    一.Installation 1.安装环境为CentOS 7 2.安装Docker yum install -y docker systemctl enable docker systemctl st ...

  9. CSS:列表样式(设置列表项的标志图案/位置)

    通过CSS 列表属性能够放置.改变列表项标志.或者将图像作为列表项标志. 代码整理自w3school:http://www.w3school.com.cn 效果图: watermark/2/text/ ...

  10. 代码艺术 CountDownTimer

    /** * Schedule a countdown until a time in the future, with regular notifications on intervals along ...