Zookeeper学习:Zookeeper的安全认证
Zookeeper的安全认证,在于其ACL(Access Control List)。Zookeeper提供了三种权限控制机制:权限模式、授权对象、权限;
权限模式:Scheme,一般使用如下四种权限模式;
IP:IP模式通过IP地址粒度来进行控制权限。当然,也支持网段分配;
Digest:最常用的权限控制模式,类似于“username:password”形式的权限标识进行权限配置。Zookeeper对形成的权限标识先后进行两次编码处理:SHA-1加密算法、Base64编码;
World:一种最开放的权限控制模式,仅仅使用一个标识;
Super:超级用户模式,在超级用户模式下可以对Zookeeper进行任意操作;
权限对象:指权限赋予的用户或一个指定的实体,在不同模式下,授权对象也是不同的。这种模式和授权对象一一对应;
权限:指通过权限检测后可以被允许执行的操作,Zookeeper对数据的操作权限分为五大类:CREATE、DELETE、READ、WRITE、ADMIN;
下面以Digest为例,跑一段代码看一下效果:
public class ZookeeperAuth2{//连接地址private static final String CONNECTION_ADDR = "192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:2181"; //测试路径private static final String NODE_PATH = "/testAuth";//认证类型private static final String AUTH_TYPE = "digest";//正确的认证private static final String AUTH_VALUE = "20190112";//错误的认证private static final String AUTH_BAD_VALUE = "20180112";public static void main(String[] args) {try {//一、创建节点ZooKeeper zk=new ZooKeeper(CONNECTION_ADDR,5000,new Watcher() {public void process(WatchedEvent event) {}});zk.addAuthInfo(AUTH_TYPE,AUTH_VALUE.getBytes());zk.create(NODE_PATH,"买女孩的小火柴".getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);} catch (Exception e) {System.err.println("节点创建失败,原因:" + e.getMessage());}try { //二、无授权信息访问ZooKeeper zk2=new ZooKeeper(CONNECTION_ADDR,5000,new Watcher() {public void process(WatchedEvent event) {}});System.out.println("无授权信息访问,获取数据为:" + new String(zk2.getData(NODE_PATH,false,null)));} catch (Exception e) {System.err.println("无授权信息访问失败,原因:" + e.getMessage());}try { //三、使用错误信息访问结点ZooKeeper zk3=new ZooKeeper(CONNECTION_ADDR,5000,new Watcher() {public void process(WatchedEvent event) {}});zk3.addAuthInfo(AUTH_TYPE,AUTH_BAD_VALUE.getBytes());System.out.println("使用错误信息访问结点,获取数据为:" + new String(zk3.getData(NODE_PATH,false,null)));} catch (Exception e) {System.err.println("使用错误信息访问结点失败,原因:" + e.getMessage());} try { //四、使用正确信息访问结点ZooKeeper zk4=new ZooKeeper(CONNECTION_ADDR,5000,new Watcher() {public void process(WatchedEvent event) {}});zk4.addAuthInfo(AUTH_TYPE,AUTH_VALUE.getBytes());System.out.println("使用正确信息访问结点,获取数据为:" + new String(zk4.getData(NODE_PATH,false,null)));} catch (Exception e) {System.err.println("使用正确信息访问结点失败,原因:" + e.getMessage());}}}
运行效果如图:

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
