Zookeeper-02

客户端回调Zookeeper Watcher

     

客户端回调Zookeeper Watcher是指在Zookeeper客户端与Zookeeper服务器之间的通信过程中,当某种特定事件发生时,Zookeeper服务器会通知客户端,客户端在收到通知后会调用事先注册的Watcher对象的回调方法。

Watcher对象是由客户端在调用Zookeeper API方法时传入的,用于监视Zookeeper服务器中的某个节点或者是整个Zookeeper数据树的变化。当被监视的节点发生变化时,Zookeeper服务器会向客户端发送一个事件通知,客户端会根据这个通知调用Watcher对象的回调方法。

回调方法是Watcher接口中定义的方法,客户端可以根据自己的需求实现这个方法。在回调方法中可以对节点的变化进行相应的处理,例如更新缓存、重新注册Watcher等。

客户端通过注册Watcher对象来设置对节点的监视,可以通过调用create、delete、setData或exists方法时传入一个Watcher对象来注册对节点的创建、删除、数据更新或节点是否存在的事件进行监视。当注册的Watcher对象被触发时,客户端会收到一个事件通知,然后可以在回调方法中进行相应的处理。

ZookeeperACL 权限控制机制

    ZookeeperACL是Zookeeper中的权限控制机制,用于限制对Zookeeper节点的访问和操作。通过ACL,可以定义不同的角色和授权规则,以确保只有被授权的用户或应用程序能够对节点进行读写操作。

ZookeeperACL使用以下三个概念来设置和管理权限:

  1. Scheme(方案):指定用于验证用户或应用程序身份的方案,例如digest、ip、world等。每个方案都有相应的标识符和凭证。

  2. ID(标识符):标识用户或应用程序的唯一ID。

  3. Permission(权限):定义对节点的操作权限,包括读(read)、写(write)、创建(create)、删除(delete)、管理(admin)等。

使用ZookeeperACL,可以通过以下步骤来设置权限:

  1. 创建角色和用户:使用Zookeeper提供的命令或API,创建不同的角色和用户,并为它们分配相应的标识符。

  2. 创建ACL:为每个节点创建ACL规则,指定允许或拒绝的角色、用户和权限。

  3. 设置ACL:将ACL规则应用于节点,通过命令或API设置节点的ACL属性。

代码示例

    

下面是一个使用Zookeeper的ACL权限控制机制的Java代码示例:

import org.apache.zookeeper.*;
import org.apache.zookeeper.data.ACL;
import org.apache.zookeeper.data.Id;
import org.apache.zookeeper.server.auth.DigestAuthenticationProvider;import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;public class ZookeeperACLExample {private static final String ZOOKEEPER_CONNECTION_STRING = "localhost:2181";private static final int SESSION_TIMEOUT = 3000;private static final String ZNODE_PATH = "/myznode";private static final String USERNAME = "user";private static final String PASSWORD = "password";public static void main(String[] args) throws IOException, KeeperException, InterruptedException, NoSuchAlgorithmException {ZooKeeper zooKeeper = connectToZookeeper();createZnodeWithACL(zooKeeper);zooKeeper.close();}private static ZooKeeper connectToZookeeper() throws IOException, InterruptedException {CountDownLatch connectedSignal = new CountDownLatch(1);ZooKeeper zooKeeper = new ZooKeeper(ZOOKEEPER_CONNECTION_STRING, SESSION_TIMEOUT, new Watcher() {public void process(WatchedEvent event) {if (event.getState() == Event.KeeperState.SyncConnected) {connectedSignal.countDown();}}});connectedSignal.await();return zooKeeper;}private static void createZnodeWithACL(ZooKeeper zooKeeper) throws NoSuchAlgorithmException, KeeperException, InterruptedException {// 创建ACL权限控制列表List<ACL> aclList = new ArrayList<>();// 创建所有用户的ACL权限aclList.add(new ACL(ZooDefs.Perms.ALL, new Id("world", "anyone")));// 创建指定用户的ACL权限String digest = DigestAuthenticationProvider.generateDigest(USERNAME + ":" + PASSWORD);aclList.add(new ACL(ZooDefs.Perms.READ | ZooDefs.Perms.WRITE, new Id("digest", digest)));// 创建znode并设置ACL权限zooKeeper.create(ZNODE_PATH, "data".getBytes(), aclList, CreateMode.PERSISTENT);}
}

在上面的示例中,我们首先通过connectToZookeeper方法连接到Zookeeper服务器。然后,我们使用createZnodeWithACL方法创建一个具有ACL权限控制的znode。在这个方法中,我们创建了一个ACL权限控制列表,并将其传递给create方法,以便为znode设置ACL权限。在这里,我们创建了两个ACL权限:一个是world用户,拥有ALL权限,另一个是指定用户,拥有READ和WRITE权限。最后,我们关闭了与Zookeeper的连接。

请注意,上述代码中的USERNAMEPASSWORD是用于指定用户的用户名和密码。这里使用的是DigestAuthenticationProvider.generateDigest方法生成的用户摘要,该方法采用username:password格式的用户凭证,并返回一个Base64编码的字符串。

总结

    

ZookeeperACL(Access Control List)是Zookeeper的访问控制机制,用于控制客户端对Zookeeper节点的访问权限。ACL是以节点为单位进行控制,每个节点都可以设置多个ACL规则。

ZookeeperACL使用以下规则:

  • 每个节点都可以设置一个或多个ACL规则。
  • 每个ACL都由一个权限信息(permission)、一个表示授权对象的ID(id)和一个表示授权模式的标识符(scheme)组成。
  • 授权对象可以是一个IP地址、一个用户名或一个节点路径。
  • 授权模式可以是world、auth、digest、ip或super。
  • world模式表示授权对象为"anyone",即所有用户。
  • auth模式表示授权对象为通过Zookeeper认证的用户。
  • digest模式表示授权对象为使用用户名和密码进行认证的用户。
  • ip模式表示授权对象为具有特定IP地址的用户。
  • super模式表示授权对象为拥有超级用户权限的用户。
  • 权限信息包括create、read、write、delete和admin五种操作,用于控制对节点的创建、读取、写入、删除和管理权限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/31235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【第18章】Vue实战篇之登录界面

文章目录 前言一、数据绑定1. 数据绑定2. 数据清空 二、表单校验1. 代码2. 展示 三、登录1.登录按钮2.user.js3. login 四、展示总结 前言 上一章完成用户注册&#xff0c;这一章主要做用户登录。 一、数据绑定 登录和注册使用相同的数据绑定 1. 数据绑定 <!-- 登录表单 -…

紧凑型计算微型仿生复眼

欢迎关注&#xff1a;GZH《光场视觉》 图1 研制的计算微型复眼的成像原理 1. 导读 微型曲面复眼由于具有大视场成像、大景深成像、体积较小的优势&#xff0c;在机器视觉、无人机导航、生物灵感机器人等领域引起了广泛关注。然而&#xff0c;传统的微型曲面复眼存在设计/加工…

HTTP详细总结

概念 HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则。 特点 基于TCP协议: 面向连接&#xff0c;安全 TCP是一种面向连接的(建立连接之前是需要经过三次握手)、可靠的、基于字节流的传输层通信协议&#xff0c;在…

SpringMvc—域对象共享数据和视图

一、向request域创建对象 先创建首页&#xff1a; 在testController这个类中&#xff1a; package com.pon.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; Controller public class test…

response.setHeader用法总结

response.setHeader用法总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在Web开发中&#xff0c;response.setHeader是一个用于设置HTTP响应头的方法。通过…

MySQL的LIFO如何实现

MySQL本身并没有直接提供LIFO&#xff08;后进先出&#xff09;的数据结构或操作&#xff0c;但你可以通过某些表设计和查询来实现LIFO的效果。以下是一个基于时间戳或自动递增ID的LIFO实现方法&#xff1a; 1. 表设计 假设你有一个表my_queue&#xff0c;它有一个自增ID和一…

后台管理系统登录业务分析(图片验证码登录)

文章目录 1、登录业务分析2、登录开发流程2.1、获取图片验证码接口业务2.2、CodeImgServiceImpl2.2.1、响应 2.3、IndexController2.4、SysUserServiceImpl2.5、SysUserMapper.xml 3、springmvc拦截器创建&注册3.1、springmvc拦截器的创建3.2、springmvc拦截器注册3.3、Sys…

【Oracle APEX开发小技巧1】转换类型实现显示小数点前的 0 以 及常见类型转换

在 apex 交互式式网格中&#xff0c;有一数值类型为 NUMBER&#xff0c;保留小数点后两位的项&#xff0c;在 展示时小数点前的 0 不显示。 效果如下&#xff1a; 转换前&#xff1a; m.WEIGHT_COEFFICIENT 解决方案&#xff1a; 将 NUMBER&#xff08;20&#xff0c;2&#xf…

Vue 自定义ElementUI的Loading效果

import { loadingText, messageDuration } from "/settings";import { Loading } from "element-ui"; // loadingText、messageDuration 这两个参数我是调的公共配置文件,按自己需求来 const install (Vue, opts {}) > {/* 全局多彩Loading加载层 *…

cpolar:通过脚本自动更新主机名称和端口号进行内网穿透【免费版】

cpolar 的免费版经常会重新分配 HostName 和 Port&#xff0c;总是手动修改太过麻烦&#xff0c;分享一下自动更新配置文件并进行内网穿透的方法。 文章目录 配置 ssh config编写脚本获取 csrf_token打开登陆界面SafariChrome 设置别名 假设你已经配置好了服务器端的 cpolar。 …

Spring AI 调用 openAI 进行语音识别

Spring AI支持语音识别功能&#xff0c;目前仅支持OpenAI的Transcription模型。 项目搭建&#xff1a; 参考 Spring AI 介绍以及与 Spring Boot 项目整合 源码示例&#xff1a; RestController RequestMapping("/openai") public class OpenAiIAudioTranscriptionC…

1964springboot VUE 智慧社区可视化平台系统开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot VUE社区可视化平台系统是一套完善的完整信息管理类型系统&#xff0c;结合springboot框架和VUE完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码…

Android Studio main,xml 视图代码转换

Android Studio main,xml 视图&&代码转换 其实很简单,但是对我们小白来说还是比较蒙的。 废话不多说,直接上图。 我的Android Studio 是 4.0 版的 我刚打开是这个界面,在我想学习如何用代码来布局,可能大家也会找不见代码的位置。 follow me 是不是感觉很简单呢。…

394. 字符串解码

394. 字符串解码 题目链接&#xff1a;394. 字符串解码 代码如下&#xff1a; class Solution { public:string decodeString(string s) {stack<string> strs; stack<int> nums; int num0;string res;for(int i0;i<s.size();i){if(s[i]>1&&s[i]…

应用安全.

模糊测试是一种黑盒测试技术&#xff0c;它将大量的畸形数据输入到目标程序中&#xff0c;通过监测程序的异常来发现被测程序中可能存在的安全漏洞。模糊测试不需要程序的源代码就可以发现问题&#xff0c;是一种自动化的动态漏洞挖掘技术&#xff0c;不存在误报&#xff0c;也…

【usb设备端口异常】——使用ls /dev/video*查看设备号时出现报错:ls:无法访问‘/dev/video*‘: 没有那个文件或目录

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、ls:无法访问/dev/video*: 没有那个文件或目录1. 问题描述2. 原因分析3. 解决方法 总结 前言 一、ls:无法访问’/dev/video*: 没有那个文件或目录 使用的这…

21、24年--项目管理概论——项目经理的角色

1、项目经理的定义 项目经理的角色不同于职能经理或运营经理。一般而言,职能经理专注于对某个职能流域或业务部门的而管理监督。运营经理负责保证业务运营的高效性。项目经理则由执行组织委派,负责领导团队实现项目目标。 2、项目经理的影响力范围 2.1 概述 项目经理…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 披萨大作战(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

《梦醒蝶飞:释放Excel函数与公式的力量》4.1if函数

第4章&#xff1a;逻辑与条件函数 第一节4.1 if函数 在Excel中&#xff0c;逻辑函数用于处理基于特定条件的真假判断&#xff0c;它们是构建复杂公式和进行高级数据分析的基础。本章将深入探讨逻辑函数的使用方法&#xff0c;特别是IF函数&#xff0c;这是Excel中最为常用的条…

1 UC

1 UC 1、环境变量2、环境变量表3、错误处理4、库文件4.1 静态库4.2 动态库4.3 动态库的动态加载 5、虚拟地址 1、环境变量 什么是环境变量&#xff1f; 每个进程都有一张自己的环境变量表&#xff0c;表中的每个条目都是形如“键值”形式的环境变量。进程可以通过环境变量访问…