public static void GetACL() { Stat stat = new Stat(); var data = zk.GetACL("/test", stat); // 第二个参数不允许为空,为空时会报错 // ip 和 world 不需要也不能添加 AddAuthInfo zk.AddAuthInfo("digest", "user1:12345".GetBytes()); var data1 = System.Text.Encoding.Default.GetString(zk.GetData("/test", false, stat)); }
static void Main(string[] args) { var zookeeper = new ZooKeeper("127.0.0.1:2181", new TimeSpan(0, 0, 5), null); //添加权限信息后创建的节点就 受到了权限控制 zookeeper.AddAuthInfo("digest", "foo:true".GetBytes()); zookeeper.Create(PATH, "init".GetBytes(), Ids.CREATOR_ALL_ACL, CreateMode.Ephemeral); try { var zooKeeper2 = new ZooKeeper("127.0.0.1:2181", new TimeSpan(0, 0, 5), null); //这儿会抛出异常,无权限访问 zooKeeper2.GetData(PATH, false, null); } catch (Exception ex) { Console.WriteLine(ex); Console.WriteLine(); } try { var zooKeeper3 = new ZooKeeper("127.0.0.1:2181", new TimeSpan(0, 0, 5), null); zooKeeper3.AddAuthInfo("digest", "foo:false".GetBytes()); zooKeeper3.GetData(PATH, false, null); } catch (Exception ex) { Console.WriteLine(ex); Console.WriteLine(); } try { var zooKeeper4 = new ZooKeeper("127.0.0.1:2181", new TimeSpan(0, 0, 5), null); zooKeeper4.AddAuthInfo("digest5555555", "foo:true".GetBytes()); zooKeeper4.GetData(PATH, false, null); } catch (Exception ex) { Console.WriteLine(ex); } zookeeper.GetData(PATH, null, null); zookeeper.Dispose(); Console.ReadLine(); }
static void Main(string[] args) { log4net.Config.XmlConfigurator.Configure(new FileInfo("zookeeperDemo.log4net")); zookeeper = new ZooKeeper("127.0.0.1:2181", new TimeSpan(0, 0, 10), new ZooKeeper_Auth_Usage()); zookeeper.AddAuthInfo("digest", "taokeeper:true".GetBytes()); manualWaitHandler.WaitOne(); //ASYNC_VerifyZookeeper(); string path = "/zk-book"; var testStat = zookeeper.Exists(path, false); if (testStat == null) { zookeeper.Create(path, "123".GetBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.Ephemeral); } var pathData = zookeeper.GetData(path, true, null); Console.WriteLine("The path's data(watched):{0}", System.Text.UTF8Encoding.UTF8.GetString(pathData)); // var errorzk = new ZooKeeper("127.0.0.1:2181", new TimeSpan(0, 0, 10), new ZooKeeper_Auth_Usage()); errorzk.AddAuthInfo("digest", "taokeeper:error".GetBytes()); manualWaitHandler.WaitOne(); var tempdata = errorzk.GetData(path, true, null); Console.WriteLine("The path's data(watched):{0}", System.Text.UTF8Encoding.UTF8.GetString(tempdata)); Console.ReadLine(); }
public void testRootAcl() { ZooKeeper zk = CreateClient(); // set auth using digest zk.AddAuthInfo("digest", Encoding.UTF8.GetBytes("pat:test")); zk.SetACL("/", Ids.CREATOR_ALL_ACL, -1); zk.GetData("/", false, null); zk.Dispose(); // verify no access zk = CreateClient(); try { zk.GetData("/", false, null); Assert.Fail("validate auth"); } catch (KeeperException.NoAuthException e) { // expected } string path = "/" + Guid.NewGuid() + "apps"; try { zk.Create(path, null, Ids.CREATOR_ALL_ACL, CreateMode.Persistent); Assert.Fail("validate auth"); } catch (KeeperException.InvalidACLException e) { // expected } zk.AddAuthInfo("digest", Encoding.UTF8.GetBytes("world:anyone")); try { zk.Create(path, null, Ids.CREATOR_ALL_ACL, CreateMode.Persistent); Assert.Fail("validate auth"); } catch (KeeperException.NoAuthException e) { // expected } zk.Dispose(); // verify access using original auth zk = CreateClient(); zk.AddAuthInfo("digest", Encoding.UTF8.GetBytes("pat:test")); zk.GetData("/", false, null); zk.Create(path, null, Ids.CREATOR_ALL_ACL, CreateMode.Persistent); zk.Delete(path, -1); // reset acl (back to open) and verify accessible again zk.SetACL("/", Ids.OPEN_ACL_UNSAFE, -1); zk.Dispose(); zk = CreateClient(); zk.GetData("/", false, null); zk.Create(path, null, Ids.OPEN_ACL_UNSAFE, CreateMode.Persistent); try { zk.Create(path, null, Ids.CREATOR_ALL_ACL, CreateMode.Persistent); Assert.Fail("validate auth"); } catch (KeeperException.InvalidACLException e) { // expected } zk.Delete(path, -1); zk.AddAuthInfo("digest", Encoding.UTF8.GetBytes("world:anyone")); zk.Create(path, null, Ids.CREATOR_ALL_ACL, CreateMode.Persistent); zk.Dispose(); zk = CreateClient(); zk.Delete(path, -1); }