Zookeeper权限控制

该博客演示了如何使用Zookeeper进行权限控制,通过ZkClient实现数据的创建、读取、更新和删除,并展示了不同授权信息(正确、错误、无)对操作的影响。主要涉及授权类型为'digest'。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

  1. package org.I0Itec.zkclient; 
  2.  
  3. import java.util.ArrayList; 
  4. import java.util.List; 
  5.  
  6. import org.apache.zookeeper.WatchedEvent; 
  7. import org.apache.zookeeper.Watcher; 
  8. import org.apache.zookeeper.ZooDefs.Ids; 
  9. import org.apache.zookeeper.data.ACL; 
  10.  
  11. /** 
  12. * Description: ZooKeepre ACL权限控制 测试 
  13. * @author nileader / nileader@gmail.com 
  14. * @Date Feb 2, 2012 
  15. */ 
  16. public class DemoAuth implements Watcher { 
  17.  
  18. final static String SERVER_LIST = “127.0.0.1:4711″; 
  19.  
  20. final static String PATH = “/yinshi_auth_test”; 
  21. final static String PATH_DEL = “/yinshi_auth_test/will_be_del”; 
  22.  
  23. final static String authentication_type = “digest”; 
  24.  
  25. final static String correctAuthentication = “taokeeper:true”; 
  26. final static String badAuthentication = “taokeeper:errorCode”; 
  27.  
  28. static ZkClient zkClient = null
  29.  
  30. public static void main( String[] args ) throws Exception { 
  31.  
  32. List< ACL > acls = new ArrayList< ACL >( 1 ); 
  33. for ( ACL ids_acl : Ids.CREATOR_ALL_ACL ) { 
  34. acls.add( ids_acl ); 
  35.  
  36. try { 
  37. zkClient = new ZkClient( SERVER_LIST, 50000); 
  38. zkClient.addAuthInfo( authentication_type, correctAuthentication.getBytes() ); 
  39. catch ( Exception e ) { 
  40. // TODO Auto-generated catch block 
  41. e.printStackTrace(); 
  42.  
  43. try { 
  44. zkClient.createPersistent( PATH, acls, “init content” ); 
  45. System.out.println( “使用授权key:” + correctAuthentication + “创建节点:” + PATH + “, 初始内容是: init content” ); 
  46. catch ( Exception e ) { 
  47. e.printStackTrace(); 
  48. try { 
  49. zkClient.createPersistent( PATH_DEL, acls, “待删节点” ); 
  50. System.out.println( “使用授权key:” + correctAuthentication + “创建节点:” + PATH_DEL + “, 初始内容是: init content” ); 
  51. catch ( Exception e ) { 
  52. // TODO Auto-generated catch block 
  53. e.printStackTrace(); 
  54.  
  55. // 获取数据 
  56. getDataByNoAuthentication(); 
  57. getDataByBadAuthentication(); 
  58. getDataByCorrectAuthentication(); 
  59.  
  60. // 更新数据 
  61. updateDataByNoAuthentication(); 
  62. updateDataByBadAuthentication(); 
  63. updateDataByCorrectAuthentication(); 
  64.  
  65. // 获取数据 
  66. getDataByNoAuthentication(); 
  67. getDataByBadAuthentication(); 
  68. getDataByCorrectAuthentication(); 
  69.  
  70. //删除数据 
  71. deleteNodeByBadAuthentication(); 
  72. deleteNodeByNoAuthentication(); 
  73. deleteNodeByCorrectAuthentication(); 
  74.  
  75. deleteParent(); 
  76.  
  77. zkClient.close(); 
  78.  
  79. /** 获取数据:采用错误的密码 */ 
  80. static void getDataByBadAuthentication() { 
  81. String prefix = “[使用错误的授权信息]“; 
  82. try { 
  83. System.out.println( prefix + “获取数据:” + PATH ); 
  84. zkClient = new ZkClient( SERVER_LIST, 50000); 
  85. zkClient.addAuthInfo( authentication_type, badAuthentication.getBytes() ); 
  86. System.out.println( prefix + “成功获取数据:” + zkClient.readData( PATH ) ); 
  87. catch ( Exception e ) { 
  88. System.err.println( prefix + “获取数据失败,原因:” + e.getMessage() ); 
  89.  
  90. /** 获取数据:不采用密码 */ 
  91. static void getDataByNoAuthentication() { 
  92. String prefix = “[不使用任何授权信息]“; 
  93. try { 
  94. System.out.println( prefix + “获取数据:” + PATH ); 
  95. zkClient = new ZkClient( SERVER_LIST, 50000); 
  96. /*
  97. zkClient.addAuthInfo( authentication_type, correctAuthentication.getBytes() ); 
  98. */
  99. System.out.println( prefix + “成功获取数据:” + zkClient.readData( PATH ) ); 
  100. catch ( Exception e ) { 
  101. System.err.println( prefix + “获取数据失败,原因:” + e.getMessage() ); 
  102.  
  103. /** 采用正确的密码 */ 
  104. static void getDataByCorrectAuthentication() { 
  105. String prefix = “[使用正确的授权信息]“; 
  106. try { 
  107. System.out.println( prefix + “获取数据:” + PATH ); 
  108. zkClient = new ZkClient( SERVER_LIST, 50000); 
  109. zkClient.addAuthInfo( authentication_type, correctAuthentication.getBytes() ); 
  110. System.out.println( prefix + “成功获取数据:” + zkClient.readData( PATH ) ); 
  111. catch ( Exception e ) { 
  112. System.out.println( prefix + “获取数据失败,原因:” + e.getMessage() ); 
  113.  
  114. /** 
  115. * 更新数据:不采用密码 
  116. */ 
  117. static void updateDataByNoAuthentication() { 
  118.  
  119. String prefix = “[不使用任何授权信息]“; 
  120.  
  121. System.out.println( prefix + “更新数据: ” + PATH ); 
  122. try { 
  123. zkClient = new ZkClient( SERVER_LIST, 50000); 
  124. if( zkClient.exists( PATH ) ){ 
  125. zkClient.writeData( PATH, prefix ); 
  126. System.out.println( prefix + “更新成功” ); 
  127. catch ( Exception e ) { 
  128. System.err.println( prefix + “更新失败,原因是:” + e.getMessage() ); 
  129.  
  130. /** 
  131. * 更新数据:采用错误的密码 
  132. */ 
  133. static void updateDataByBadAuthentication() { 
  134.  
  135. String prefix = “[使用错误的授权信息]“; 
  136.  
  137. System.out.println( prefix + “更新数据:” + PATH ); 
  138. try { 
  139. zkClient = new ZkClient( SERVER_LIST, 50000); 
  140. zkClient.addAuthInfo( authentication_type, badAuthentication.getBytes() ); 
  141. if( zkClient.exists( PATH ) ){ 
  142. zkClient.writeData( PATH, prefix ); 
  143. System.out.println( prefix + “更新成功” ); 
  144. catch ( Exception e ) { 
  145. System.err.println( prefix + “更新失败,原因是:” + e.getMessage() ); 
  146.  
  147. /** 
  148. * 更新数据:采用正确的密码 
  149. */ 
  150. static void updateDataByCorrectAuthentication() { 
  151.  
  152. String prefix = “[使用正确的授权信息]“; 
  153.  
  154. System.out.println( prefix + “更新数据:” + PATH ); 
  155. try { 
  156. zkClient = new ZkClient( SERVER_LIST, 50000); 
  157. zkClient.addAuthInfo( authentication_typecorrectAuthentication.getBytes() ); 
  158. if( zkClient.exists( PATH ) ){ 
  159. zkClient.writeData( PATH, prefix ); 
  160. System.out.println( prefix + “更新成功” ); 
  161. catch ( Exception e ) { 
  162. System.err.println( prefix + “更新失败,原因是:” + e.getMessage() ); 
  163.  
  164. /** 
  165. * 不使用密码 删除节点 
  166. */ 
  167. static void deleteNodeByNoAuthentication() throws Exception { 
  168.  
  169. String prefix = “[不使用任何授权信息]“; 
  170.  
  171. try { 
  172. System.out.println( prefix + “删除节点:” + PATH_DEL ); 
  173. zkClient = new ZkClient( SERVER_LIST, 50000); 
  174. if( zkClient.exists( PATH_DEL ) ){ 
  175. zkClient.delete( PATH_DEL ); 
  176. System.out.println( prefix + “删除成功” ); 
  177. catch ( Exception e ) { 
  178. System.err.println( prefix + “删除失败,原因是:” + e.getMessage() ); 
  179.  
  180. /** 
  181. * 采用错误的密码删除节点 
  182. */ 
  183. static void deleteNodeByBadAuthentication() throws Exception { 
  184.  
  185. String prefix = “[使用错误的授权信息]“; 
  186.  
  187. try { 
  188. System.out.println( prefix + “删除节点:” + PATH_DEL ); 
  189. zkClient = new ZkClient( SERVER_LIST, 50000); 
  190. zkClient.addAuthInfo( authentication_type, badAuthentication.getBytes() ); 
  191. if( zkClient.exists( PATH_DEL ) ){ 
  192. zkClient.delete( PATH_DEL ); 
  193. System.out.println( prefix + “删除成功” ); 
  194. catch ( Exception e ) { 
  195. System.err.println( prefix + “删除失败,原因是:” + e.getMessage() ); 
  196.  
  197. /** 
  198. * 使用正确的密码删除节点 
  199. */ 
  200. static void deleteNodeByCorrectAuthentication() throws Exception { 
  201.  
  202. String prefix = “[使用正确的授权信息]“; 
  203.  
  204. try { 
  205. System.out.println( prefix + “删除节点:” + PATH_DEL ); 
  206. zkClient = new ZkClient( SERVER_LIST, 50000); 
  207. zkClient.addAuthInfo( authentication_type, correctAuthentication.getBytes() ); 
  208. if( zkClient.exists( PATH_DEL ) ){ 
  209. zkClient.delete( PATH_DEL ); 
  210. System.out.println( prefix + “删除成功” ); 
  211. catch ( Exception e ) { 
  212. System.out.println( prefix + “删除失败,原因是:” + e.getMessage() ); 
  213.  
  214. /** 
  215. * 使用正确的密码删除节点 
  216. */ 
  217. static void deleteParent() throws Exception { 
  218. try { 
  219. zkClient = new ZkClient( SERVER_LIST, 50000); 
  220. zkClient.addAuthInfo( authentication_type, correctAuthentication.getBytes() ); 
  221. if( zkClient.exists( PATH ) ){ 
  222. zkClient.delete( PATH ); 
  223. catch ( Exception e ) { 
  224. e.printStackTrace(); 
  225.  
  226. @Override 
  227. public void process( WatchedEvent event ) { 
  228. // TODO Auto-generated method stub 
  229.  
  230.  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值