4
4
import cc .cc1234 .main .context .ActiveServerContext ;
5
5
import cc .cc1234 .main .listener .TreeNodeListener ;
6
6
import cc .cc1234 .main .model .ZkServerConfig ;
7
+ import cc .cc1234 .main .util .ACLs ;
8
+ import org .apache .curator .framework .AuthInfo ;
7
9
import org .apache .curator .framework .CuratorFramework ;
8
10
import org .apache .curator .framework .CuratorFrameworkFactory ;
11
+ import org .apache .curator .framework .api .ACLProvider ;
9
12
import org .apache .curator .framework .api .CreateBuilder ;
10
13
import org .apache .curator .framework .api .DeleteBuilder ;
11
14
import org .apache .curator .framework .recipes .cache .TreeCache ;
12
15
import org .apache .curator .retry .RetryOneTime ;
13
16
import org .apache .zookeeper .CreateMode ;
17
+ import org .apache .zookeeper .ZooDefs ;
18
+ import org .apache .zookeeper .data .ACL ;
14
19
import org .slf4j .Logger ;
15
20
import org .slf4j .LoggerFactory ;
16
21
22
+ import java .util .List ;
17
23
import java .util .Optional ;
18
24
import java .util .concurrent .TimeUnit ;
19
25
import java .util .function .Consumer ;
26
+ import java .util .stream .Collectors ;
20
27
21
28
public class ZkNodeService {
22
29
@@ -29,11 +36,29 @@ public Optional<CuratorFramework> connectIfNecessary(ZkServerConfig config) thro
29
36
return result ;
30
37
} else {
31
38
final RetryOneTime retryPolicy = new RetryOneTime (3000 );
32
- final CuratorFramework client = CuratorFrameworkFactory .builder ()
39
+ final CuratorFrameworkFactory . Builder builder = CuratorFrameworkFactory .builder ()
33
40
.connectString (config .getHost ())
34
- .retryPolicy (retryPolicy )
35
- .build ();
41
+ .retryPolicy (retryPolicy );
42
+
43
+ if (!config .getAclList ().isEmpty ()) {
44
+ final List <AuthInfo > acls = config .getAclList ().stream ().map (ACLs ::parseDigest ).collect (Collectors .toList ());
45
+ builder .authorization (acls )
46
+ .aclProvider (new ACLProvider () {
47
+ @ Override
48
+ public List <ACL > getDefaultAcl () {
49
+ return ZooDefs .Ids .CREATOR_ALL_ACL ;
50
+ }
51
+
52
+ @ Override
53
+ public List <ACL > getAclForPath (String path ) {
54
+ return ZooDefs .Ids .CREATOR_ALL_ACL ;
55
+ }
56
+ });
57
+ }
58
+
59
+ final CuratorFramework client = builder .build ();
36
60
client .start ();
61
+
37
62
// TODO use async
38
63
if (!client .blockUntilConnected (5 , TimeUnit .SECONDS )) {
39
64
return Optional .empty ();
0 commit comments