IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> zookeeper节点的scheme是digest时,怎么把明文密码转换为加密后的密码 | 如果获取加密后的digetst密码 -> 正文阅读

[大数据]zookeeper节点的scheme是digest时,怎么把明文密码转换为加密后的密码 | 如果获取加密后的digetst密码

前言

在每个zk版本的中都有提供这个工具,以zookeeper-3.7.0.jar(解压后在lib里)为例。

方法

import java.security.NoSuchAlgorithmException;

import org.apache.zookeeper.server.auth.DigestAuthenticationProvider;

public class AclUtils {
	public static String getDigestUserPwd(String idPassword) throws NoSuchAlgorithmException {
		return DigestAuthenticationProvider.generateDigest(idPassword);
	}
	public static void main(String[] args) throws NoSuchAlgorithmException {
		String idPassword="root:root";//该用户通过后台的#addauth digested root:root 命令来创建的
		String idDigested=getDigestUserPwd(idPassword);
		System.out.println(idDigested);
		//root:qiTlqPLK7XM2ht3HMn02qRpkKIE=
	}
}

使用

java前台Node节点时,需要赋予节点ACL权限,scheme是digest的时候,就需要使用上面的AclUtils工具把明文密码转换为密文。上面的AclUtils工具类主要是在下面的getAcls()方法中使用,贴出整个代码,便于验证消化吸收。

package com.xp.zk.node.data.opera;

import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.security.acl.Acl;
import java.util.ArrayList;
import java.util.List;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
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;

public class ZKNodeAcl implements Watcher{
	private ZooKeeper zookeeper = null;
	public static final String zkServerPath = "192.168.31.216:2181";
	public static final Integer timeout = 5000;

	public ZKNodeAcl() {
		super();
	}

	public ZKNodeAcl(String connectStrPath) {
		try {
			zookeeper = new ZooKeeper(connectStrPath, timeout, new ZKNodeAcl());
		} catch (IOException e) {
			e.printStackTrace();
			if (null != zookeeper) {
				try {
					zookeeper.close();
				} catch (InterruptedException e1) {
					e1.printStackTrace();
				}
			}
		}
	}
 
	public static void createNode(String nodePath,byte[]data,List<ACL> acls) throws Exception{
		ZooKeeper zookeeper=new ZKNodeAcl(zkServerPath).getZookeeper();
		Stat stat=zookeeper.exists(nodePath, false);//先判断节点是否已经存在(false意思是不再回调process)
		if(null!=stat) {
			System.out.println("节点已存在,版本号:"+stat.getVersion());
		}else {
			System.out.println("节点不存在,正在创建…");
			zookeeper.addAuthInfo("digest", "lilei:lilei".getBytes());//登录lilei用户
			String result=zookeeper.create(nodePath, data, acls,CreateMode.PERSISTENT);
			System.out.println("创建节点:\t"+result+"\t成功");
		}
	}
	 
	//一次性给两个用户赋值不同的操作权限
	public static List<ACL> getAcls() throws NoSuchAlgorithmException{
		List<ACL> acls=new ArrayList<ACL>();
		Id mayun =new Id("digest", AclUtils.getDigestUserPwd("mayun:mayun"));
		Id lilei =new Id("digest", AclUtils.getDigestUserPwd("lilei:lilei"));
		acls.add(new ACL(Perms.ALL, mayun));//给mayun一次性赋值所有权限
		acls.add(new ACL(Perms.READ, lilei));
		acls.add(new ACL(Perms.DELETE | Perms.CREATE, lilei));//给lilei分两次赋权限(目的:看不同的赋权方式)
		return acls;
	}
	public static void main(String[] args) throws Exception {
		String fatherPath="/succ/testdigest";
		ZKNodeAcl.createNode(fatherPath, "testdigest".getBytes(), getAcls());//分配自定义权限
   	}
 
	@Override
	public void process(WatchedEvent event) {
		 
	}

	public ZooKeeper getZookeeper() {
		return zookeeper;
	}

	public void setZookeeper(ZooKeeper zookeeper) {
		this.zookeeper = zookeeper;
	}
}

尾言

我们在java前台,添加一个node节点时,往往需要给节点赋予Acls权限,有时候直接使用Ids.CREATOR_ALL_ACL(赋予节点所有开放权限,谁都能访问),它的scheme是word。

有时需要控制一下节点的访问权限,此时的scheme就应该是digest而不是?word,此时就需要使用密文,这个时候就需要使用上面的AclUtils工具转换一下。

也就是下面这段代码,用该方法的返回值代替Ids.CREATOR_ALL_ACL。

?public static List<ACL> getAcls() throws NoSuchAlgorithmException{
?? ??? ?List<ACL> acls=new ArrayList<ACL>();
?? ??? ?Id mayun =new Id("digest", AclUtils.getDigestUserPwd("mayun:mayun"));
?? ??? ?Id lilei =new Id("digest", AclUtils.getDigestUserPwd("lilei:lilei"));
?? ??? ?acls.add(new ACL(Perms.ALL, mayun));//给mayun一次性赋值所有权限
?? ??? ?acls.add(new ACL(Perms.READ, lilei));
?? ??? ?acls.add(new ACL(Perms.DELETE | Perms.CREATE, lilei));//给lilei分两次赋权限(目的:看不同的赋权方式)
?? ??? ?return acls;
?? ?}

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 11:07:42  更:2021-12-10 11:08:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:31:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码