This is an automated email from the ASF dual-hosted git repository.

dongeforever pushed a commit to branch feature_acl
in repository https://gitbox.apache.org/repos/asf/rocketmq.git


The following commit(s) were added to refs/heads/feature_acl by this push:
     new e3d38d7  Rename and polish permission loader
e3d38d7 is described below

commit e3d38d7c3fa71d100fabc7fc3d34a11609ce3f5e
Author: dongeforever <[email protected]>
AuthorDate: Wed Dec 12 11:36:40 2018 +0800

    Rename and polish permission loader
---
 .../org/apache/rocketmq/acl/common/Permission.java |  18 +-
 .../rocketmq/acl/plain/PlainAccessResource.java    |  17 ++
 .../rocketmq/acl/plain/PlainAccessValidator.java   |   2 +-
 .../rocketmq/acl/plain/PlainPermissionLoader.java  | 198 +++++++++++----------
 .../acl/plain/RemoteAddressStrategyFactory.java    |  33 ++--
 .../apache/rocketmq/acl/common/PermissionTest.java |  28 +--
 .../acl/plain/PlainPermissionLoaderTest.java       |  20 +--
 .../acl/plain/RemoteAddressStrategyTest.java       |  36 ++--
 acl/src/test/resources/conf/transport.yml          |   4 +-
 .../java/org/apache/rocketmq/common/UtilAll.java   |  12 ++
 10 files changed, 201 insertions(+), 167 deletions(-)

diff --git a/acl/src/main/java/org/apache/rocketmq/acl/common/Permission.java 
b/acl/src/main/java/org/apache/rocketmq/acl/common/Permission.java
index b5e9be2..2fa38b1 100644
--- a/acl/src/main/java/org/apache/rocketmq/acl/common/Permission.java
+++ b/acl/src/main/java/org/apache/rocketmq/acl/common/Permission.java
@@ -55,7 +55,7 @@ public class Permission {
         return (neededPerm & ownedPerm) > 0;
     }
 
-    public static byte fromStringGetPermission(String permString) {
+    public static byte parsePermFromString(String permString) {
         if (permString == null) {
             return Permission.DENY;
         }
@@ -77,21 +77,21 @@ public class Permission {
         }
     }
 
-    public static void setTopicPerm(PlainAccessResource plainAccessResource, 
Boolean isTopic, List<String> topicArray) {
-        if (topicArray == null || topicArray.isEmpty()) {
+    public static void parseResourcePerms(PlainAccessResource 
plainAccessResource, Boolean isTopic, List<String> resources) {
+        if (resources == null || resources.isEmpty()) {
             return;
         }
-        for (String topic : topicArray) {
-            String[] topicPrem = StringUtils.split(topic, "=");
-            if (topicPrem.length == 2) {
-                plainAccessResource.addResourceAndPerm(isTopic ? topicPrem[0] 
: PlainAccessResource.getRetryTopic(topicPrem[0]), 
fromStringGetPermission(topicPrem[1]));
+        for (String resource : resources) {
+            String[] items = StringUtils.split(resource, "=");
+            if (items.length == 2) {
+                plainAccessResource.addResourceAndPerm(isTopic ? 
items[0].trim() : PlainAccessResource.getRetryTopic(items[0].trim()), 
parsePermFromString(items[1].trim()));
             } else {
-                throw new AclException(String.format("%s Permission config 
erron %s", isTopic ? "topic" : "group", topic));
+                throw new AclException(String.format("Parse resource 
permission failed for %s:%s", isTopic ? "topic" : "group", resource));
             }
         }
     }
 
-    public static boolean checkAdminCode(Integer code) {
+    public static boolean needAdminPerm(Integer code) {
         return ADMIN_CODE.contains(code);
     }
 }
diff --git 
a/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainAccessResource.java 
b/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainAccessResource.java
index 0b2f417..932a7a9 100644
--- a/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainAccessResource.java
+++ b/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainAccessResource.java
@@ -59,6 +59,23 @@ public class PlainAccessResource implements AccessResource {
         return null != topic && 
topic.startsWith(MixAll.RETRY_GROUP_TOPIC_PREFIX);
     }
 
+    public static String printStr(String resource, boolean isGroup) {
+        if (resource == null) {
+            return null;
+        }
+        if (isGroup) {
+            return String.format("%s:%s", "group", 
getGroupFromRetryTopic(resource));
+        } else {
+            return String.format("%s:%s", "topic", resource);
+        }
+    }
+
+    public static String getGroupFromRetryTopic(String retryTopic) {
+        if (retryTopic == null) {
+            return null;
+        }
+        return retryTopic.substring(MixAll.RETRY_GROUP_TOPIC_PREFIX.length());
+    }
     public static String getRetryTopic(String group) {
         if (group == null) {
             return null;
diff --git 
a/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainAccessValidator.java 
b/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainAccessValidator.java
index 8a80757..d715098 100644
--- a/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainAccessValidator.java
+++ b/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainAccessValidator.java
@@ -120,7 +120,7 @@ public class PlainAccessValidator implements 
AccessValidator {
 
     @Override
     public void validate(AccessResource accessResource) {
-        aclPlugEngine.eachCheckPlainAccessResource((PlainAccessResource) 
accessResource);
+        aclPlugEngine.validate((PlainAccessResource) accessResource);
     }
 
 }
diff --git 
a/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainPermissionLoader.java 
b/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainPermissionLoader.java
index 469c161..36f6522 100644
--- a/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainPermissionLoader.java
+++ b/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainPermissionLoader.java
@@ -28,16 +28,15 @@ import java.nio.file.WatchKey;
 import java.nio.file.WatchService;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.rocketmq.acl.common.AclException;
 import org.apache.rocketmq.acl.common.AclUtils;
 import org.apache.rocketmq.acl.common.Permission;
 import org.apache.rocketmq.common.MixAll;
 import org.apache.rocketmq.common.ServiceThread;
+import org.apache.rocketmq.common.UtilAll;
 import org.apache.rocketmq.common.constant.LoggerName;
 import org.apache.rocketmq.logging.InternalLogger;
 import org.apache.rocketmq.logging.InternalLoggerFactory;
@@ -46,13 +45,14 @@ public class PlainPermissionLoader {
 
     private static final InternalLogger log = 
InternalLoggerFactory.getLogger(LoggerName.ACL_PLUG_LOGGER_NAME);
 
+
     private String fileHome = System.getProperty(MixAll.ROCKETMQ_HOME_PROPERTY,
         System.getenv(MixAll.ROCKETMQ_HOME_ENV));
 
-    private String fileName = 
System.getProperty("romcketmq.acl.plain.fileName", "/conf/transport.yml");
+    //TODO  rename transport to plain_acl.yml
+    private String fileName = System.getProperty("rocketmq.acl.plain.file", 
"/conf/transport.yml");
 
-    private Map<String/** account **/
-        , List<PlainAccessResource>> plainAccessResourceMap = new HashMap<>();
+    private Map<String/** AccessKey **/, PlainAccessResource> 
plainAccessResourceMap = new HashMap<>();
 
     private List<RemoteAddressStrategy> globalWhiteRemoteAddressStrategy = new 
ArrayList<>();
 
@@ -61,6 +61,7 @@ public class PlainPermissionLoader {
     private boolean isWatchStart;
 
     public PlainPermissionLoader() {
+        //TODO test what will happen if initialize failed
         initialize();
         watch();
     }
@@ -76,25 +77,24 @@ public class PlainPermissionLoader {
         JSONArray globalWhiteRemoteAddressesList = 
accessControlTransport.getJSONArray("globalWhiteRemoteAddresses");
         if (globalWhiteRemoteAddressesList != null && 
!globalWhiteRemoteAddressesList.isEmpty()) {
             for (int i = 0; i < globalWhiteRemoteAddressesList.size(); i++) {
-                setGlobalWhite(globalWhiteRemoteAddressesList.getString(i));
+                
addGlobalWhiteRemoteAddress(globalWhiteRemoteAddressesList.getString(i));
             }
         }
 
         JSONArray accounts = accessControlTransport.getJSONArray("accounts");
-        List<PlainAccess> plainAccessList = 
accounts.toJavaList(PlainAccess.class);
+        List<PlainAccessConfig> plainAccessList = 
accounts.toJavaList(PlainAccessConfig.class);
         if (plainAccessList != null && !plainAccessList.isEmpty()) {
-            for (PlainAccess plainAccess : plainAccessList) {
-                
this.setPlainAccessResource(getPlainAccessResource(plainAccess));
+            for (PlainAccessConfig plainAccess : plainAccessList) {
+                
this.addPlainAccessResource(getPlainAccessResource(plainAccess));
             }
         }
     }
 
     private void watch() {
         String version = System.getProperty("java.version");
-        log.info("java.version is : {}", version);
         String[] str = StringUtils.split(version, ".");
         if (Integer.valueOf(str[1]) < 7) {
-            log.warn("wacth need jdk 1.7 support , current version no 
support");
+            log.warn("Watch need jdk equal or greater than 1.7, current 
version is {}", str[1]);
             return;
         }
         try {
@@ -106,41 +106,41 @@ public class PlainPermissionLoader {
                 public void run() {
                     while (true) {
                         try {
-                            while (true) {
-                                WatchKey watchKey = watcher.take();
-                                List<WatchEvent<?>> watchEvents = 
watchKey.pollEvents();
-                                for (WatchEvent<?> event : watchEvents) {
-                                    if 
("transport.yml".equals(event.context().toString())
-                                        && 
(StandardWatchEventKinds.ENTRY_MODIFY.equals(event.kind())
-                                        || 
StandardWatchEventKinds.ENTRY_CREATE.equals(event.kind()))) {
-                                        log.info("transprot.yml make a 
difference  change is : ", event.toString());
-                                        
PlainPermissionLoader.this.cleanAuthenticationInfo();
-                                        initialize();
-                                    }
+                            WatchKey watchKey = watcher.take();
+                            List<WatchEvent<?>> watchEvents = 
watchKey.pollEvents();
+                            for (WatchEvent<?> event : watchEvents) {
+                                //TODO use variable instead of raw text
+                                if 
("transport.yml".equals(event.context().toString())
+                                    && 
(StandardWatchEventKinds.ENTRY_MODIFY.equals(event.kind())
+                                    || 
StandardWatchEventKinds.ENTRY_CREATE.equals(event.kind()))) {
+                                    log.info("transprot.yml make a difference  
change is : ", event.toString());
+                                    
PlainPermissionLoader.this.clearPermissionInfo();
+                                    initialize();
                                 }
-                                watchKey.reset();
                             }
+                            watchKey.reset();
                         } catch (InterruptedException e) {
                             log.error(e.getMessage(), e);
+                            UtilAll.sleep(3000);
+
                         }
                     }
                 }
-
                 @Override
                 public String getServiceName() {
-                    return "watcherServcie";
+                    return "AclWatcherService";
                 }
 
             };
             watcherServcie.start();
-            log.info("succeed start watcherServcie");
+            log.info("Succeed to start AclWatcherService");
             this.isWatchStart = true;
         } catch (IOException e) {
-            log.error(e.getMessage(), e);
+            log.error("Failed to start AclWatcherService", e);
         }
     }
 
-    PlainAccessResource getPlainAccessResource(PlainAccess plainAccess) {
+    PlainAccessResource getPlainAccessResource(PlainAccessConfig plainAccess) {
         PlainAccessResource plainAccessResource = new PlainAccessResource();
         plainAccessResource.setAccessKey(plainAccess.getAccessKey());
         plainAccessResource.setSecretKey(plainAccess.getSecretKey());
@@ -148,110 +148,114 @@ public class PlainPermissionLoader {
 
         plainAccessResource.setAdmin(plainAccess.isAdmin());
 
-        
plainAccessResource.setDefaultGroupPerm(Permission.fromStringGetPermission(plainAccess.getDefaultGroupPerm()));
-        
plainAccessResource.setDefaultTopicPerm(Permission.fromStringGetPermission(plainAccess.getDefaultTopicPerm()));
+        
plainAccessResource.setDefaultGroupPerm(Permission.parsePermFromString(plainAccess.getDefaultGroupPerm()));
+        
plainAccessResource.setDefaultTopicPerm(Permission.parsePermFromString(plainAccess.getDefaultTopicPerm()));
 
-        Permission.setTopicPerm(plainAccessResource, false, 
plainAccess.getGroups());
-        Permission.setTopicPerm(plainAccessResource, true, 
plainAccess.getTopics());
+        Permission.parseResourcePerms(plainAccessResource, false, 
plainAccess.getGroupPerms());
+        Permission.parseResourcePerms(plainAccessResource, true, 
plainAccess.getTopicPerms());
         return plainAccessResource;
     }
 
-    void checkPerm(PlainAccessResource needCheckplainAccessResource, 
PlainAccessResource plainAccessResource) {
-        if (!plainAccessResource.isAdmin() && 
Permission.checkAdminCode(needCheckplainAccessResource.getRequestCode())) {
-            throw new AclException(String.format("accessKey is %s  
remoteAddress is %s , is not admin Premission . RequestCode is %d", 
plainAccessResource.getAccessKey(), 
plainAccessResource.getWhiteRemoteAddress(), 
needCheckplainAccessResource.getRequestCode()));
+    void checkPerm(PlainAccessResource needCheckedAccess, PlainAccessResource 
ownedAccess) {
+        if (Permission.needAdminPerm(needCheckedAccess.getRequestCode()) && 
!ownedAccess.isAdmin()) {
+            throw new AclException(String.format("Need admin permission for 
request code=%d, but accessKey=%s is not", needCheckedAccess.getRequestCode(), 
ownedAccess.getAccessKey()));
         }
-        Map<String, Byte> needCheckTopicAndGourpPerm = 
needCheckplainAccessResource.getResourcePermMap();
-        Map<String, Byte> topicAndGourpPerm = 
plainAccessResource.getResourcePermMap();
-
-        Iterator<Entry<String, Byte>> it = 
topicAndGourpPerm.entrySet().iterator();
-        Byte perm;
-        while (it.hasNext()) {
-            Entry<String, Byte> e = it.next();
-            if ((perm = needCheckTopicAndGourpPerm.get(e.getKey())) != null && 
Permission.checkPermission(perm, e.getValue())) {
+        Map<String, Byte> needCheckedPermMap = 
needCheckedAccess.getResourcePermMap();
+        Map<String, Byte> ownedPermMap = ownedAccess.getResourcePermMap();
+
+        for (Map.Entry<String, Byte> needCheckedEntry : 
needCheckedPermMap.entrySet()) {
+            String resource = needCheckedEntry.getKey();
+            Byte neededPerm = needCheckedEntry.getValue();
+            boolean isGroup = PlainAccessResource.isRetryTopic(resource);
+
+            if (!ownedPermMap.containsKey(resource)) {
+                //Check the default perm
+                byte ownedPerm = isGroup ? 
needCheckedAccess.getDefaultGroupPerm() :
+                    needCheckedAccess.getDefaultTopicPerm();
+                if (!Permission.checkPermission(neededPerm, ownedPerm)) {
+                    throw new AclException(String.format("No default 
permission for %s", PlainAccessResource.printStr(resource, isGroup)));
+                }
                 continue;
             }
-            byte neededPerm = PlainAccessResource.isRetryTopic(e.getKey()) ? 
needCheckplainAccessResource.getDefaultGroupPerm() :
-                needCheckplainAccessResource.getDefaultTopicPerm();
-            if (!Permission.checkPermission(neededPerm, e.getValue())) {
-                throw new AclException(String.format("", e.toString()));
+            if (!Permission.checkPermission(neededPerm, 
ownedPermMap.get(resource))) {
+                throw new AclException(String.format("No default permission 
for %s", PlainAccessResource.printStr(resource, isGroup)));
             }
         }
     }
 
-    void cleanAuthenticationInfo() {
+    void clearPermissionInfo() {
         this.plainAccessResourceMap.clear();
         this.globalWhiteRemoteAddressStrategy.clear();
     }
 
-    public void setPlainAccessResource(PlainAccessResource 
plainAccessResource) throws AclException {
-        if (plainAccessResource.getAccessKey() == null || 
plainAccessResource.getSecretKey() == null
+    public void addPlainAccessResource(PlainAccessResource 
plainAccessResource) throws AclException {
+        if (plainAccessResource.getAccessKey() == null
+            || plainAccessResource.getSecretKey() == null
             || plainAccessResource.getAccessKey().length() <= 6
             || plainAccessResource.getSecretKey().length() <= 6) {
             throw new AclException(String.format(
-                "The account password cannot be null and is longer than 6, 
account is %s  password is %s",
+                "The accessKey=%s and secretKey=%s cannot be null and length 
should longer than 6",
                 plainAccessResource.getAccessKey(), 
plainAccessResource.getSecretKey()));
         }
         try {
             RemoteAddressStrategy remoteAddressStrategy = 
remoteAddressStrategyFactory
-                .getNetaddressStrategy(plainAccessResource);
-            List<PlainAccessResource> accessControlAddressList = 
plainAccessResourceMap.get(plainAccessResource.getAccessKey());
-            if (accessControlAddressList == null) {
-                accessControlAddressList = new ArrayList<>();
-                plainAccessResourceMap.put(plainAccessResource.getAccessKey(), 
accessControlAddressList);
-            }
+                .getRemoteAddressStrategy(plainAccessResource);
             
plainAccessResource.setRemoteAddressStrategy(remoteAddressStrategy);
 
-            accessControlAddressList.add(plainAccessResource);
-            log.info("authenticationInfo is {}", 
plainAccessResource.toString());
+            if 
(plainAccessResourceMap.containsKey(plainAccessResource.getAccessKey())) {
+                log.warn("Duplicate acl config  for {}, the newly one may 
overwrite the old", plainAccessResource.getAccessKey());
+            }
+            plainAccessResourceMap.put(plainAccessResource.getAccessKey(), 
plainAccessResource);
         } catch (Exception e) {
-            throw new AclException(
-                String.format("Exception info %s  %s", e.getMessage(), 
plainAccessResource.toString()), e);
+            throw new AclException(String.format("Load plain access resource 
failed %s  %s", e.getMessage(), plainAccessResource.toString()), e);
         }
     }
 
-    private void setGlobalWhite(String remoteAddresses) {
-        
globalWhiteRemoteAddressStrategy.add(remoteAddressStrategyFactory.getNetaddressStrategy(remoteAddresses));
+    private void addGlobalWhiteRemoteAddress(String remoteAddresses) {
+        
globalWhiteRemoteAddressStrategy.add(remoteAddressStrategyFactory.getRemoteAddressStrategy(remoteAddresses));
     }
 
-    public void eachCheckPlainAccessResource(PlainAccessResource 
plainAccessResource) {
+    public void validate(PlainAccessResource plainAccessResource) {
 
-        List<PlainAccessResource> plainAccessResourceAddressList = 
plainAccessResourceMap.get(plainAccessResource.getAccessKey());
-        boolean isDistinguishAccessKey = false;
-        if (plainAccessResourceAddressList != null) {
-            for (PlainAccessResource plainAccess : 
plainAccessResourceAddressList) {
-                if 
(!plainAccess.getRemoteAddressStrategy().match(plainAccessResource)) {
-                    isDistinguishAccessKey = true;
-                    continue;
-                }
-                String signature = 
AclUtils.calSignature(plainAccessResource.getContent(), 
plainAccess.getSecretKey());
-                if (signature.equals(plainAccessResource.getSignature())) {
-                    checkPerm(plainAccess, plainAccessResource);
-                    return;
-                } else {
-                    throw new AclException(String.format("signature is erron. 
erron accessKe is %s , erron reomiteAddress %s", plainAccess.getAccessKey(), 
plainAccessResource.getWhiteRemoteAddress()));
-                }
+        //Step 1, check the global white remote addr
+        if (plainAccessResource.getAccessKey() == null) {
+            if (globalWhiteRemoteAddressStrategy.isEmpty()) {
+                throw new AclException(String.format("No accessKey is 
configured and no global white remote addr is configured"));
             }
-        }
-
-        if (plainAccessResource.getAccessKey() == null && 
!globalWhiteRemoteAddressStrategy.isEmpty()) {
             for (RemoteAddressStrategy remoteAddressStrategy : 
globalWhiteRemoteAddressStrategy) {
                 if (remoteAddressStrategy.match(plainAccessResource)) {
                     return;
                 }
             }
+            throw new AclException(String.format("No accessKey is configured 
and no global white remote addr is matched"));
+        }
+
+        if 
(!plainAccessResourceMap.containsKey(plainAccessResource.getAccessKey())) {
+            throw new AclException(String.format("No acl config for %s", 
plainAccessResource.getAccessKey()));
         }
-        if (isDistinguishAccessKey) {
-            throw new AclException(String.format("client ip  not in 
WhiteRemoteAddress . erron accessKe is %s , erron reomiteAddress %s", 
plainAccessResource.getAccessKey(), 
plainAccessResource.getWhiteRemoteAddress()));
-        } else {
-            throw new AclException(String.format("It is not make Access and 
make client ip .erron accessKe is %s , erron reomiteAddress %s", 
plainAccessResource.getAccessKey(), 
plainAccessResource.getWhiteRemoteAddress()));
+
+        //Step 2, check the white addr for accesskey
+        PlainAccessResource ownedAccess = 
plainAccessResourceMap.get(plainAccessResource.getAccessKey());
+        if (ownedAccess.getRemoteAddressStrategy().match(plainAccessResource)) 
{
+            return;
         }
+
+
+        //Step 3, check the signature
+        String signature = 
AclUtils.calSignature(plainAccessResource.getContent(), 
ownedAccess.getSecretKey());
+        if (!signature.equals(plainAccessResource.getSignature())) {
+            throw new AclException(String.format("Check signature failed for 
accessKey=%s", plainAccessResource.getAccessKey()));
+        }
+        //Step 4, check perm of each resource
+
+        checkPerm(plainAccessResource, ownedAccess);
     }
 
     public boolean isWatchStart() {
         return isWatchStart;
     }
 
-    static class PlainAccess {
+    static class PlainAccessConfig {
 
         private String accessKey;
 
@@ -265,9 +269,9 @@ public class PlainPermissionLoader {
 
         private String defaultGroupPerm;
 
-        private List<String> topics;
+        private List<String> topicPerms;
 
-        private List<String> groups;
+        private List<String> groupPerms;
 
         public String getAccessKey() {
             return accessKey;
@@ -317,20 +321,20 @@ public class PlainPermissionLoader {
             this.defaultGroupPerm = defaultGroupPerm;
         }
 
-        public List<String> getTopics() {
-            return topics;
+        public List<String> getTopicPerms() {
+            return topicPerms;
         }
 
-        public void setTopics(List<String> topics) {
-            this.topics = topics;
+        public void setTopicPerms(List<String> topicPerms) {
+            this.topicPerms = topicPerms;
         }
 
-        public List<String> getGroups() {
-            return groups;
+        public List<String> getGroupPerms() {
+            return groupPerms;
         }
 
-        public void setGroups(List<String> groups) {
-            this.groups = groups;
+        public void setGroupPerms(List<String> groupPerms) {
+            this.groupPerms = groupPerms;
         }
 
     }
diff --git 
a/acl/src/main/java/org/apache/rocketmq/acl/plain/RemoteAddressStrategyFactory.java
 
b/acl/src/main/java/org/apache/rocketmq/acl/plain/RemoteAddressStrategyFactory.java
index 8015b68..679e846 100644
--- 
a/acl/src/main/java/org/apache/rocketmq/acl/plain/RemoteAddressStrategyFactory.java
+++ 
b/acl/src/main/java/org/apache/rocketmq/acl/plain/RemoteAddressStrategyFactory.java
@@ -26,28 +26,29 @@ public class RemoteAddressStrategyFactory {
 
     public static final NullRemoteAddressStrategy NULL_NET_ADDRESS_STRATEGY = 
new NullRemoteAddressStrategy();
 
-    public RemoteAddressStrategy getNetaddressStrategy(PlainAccessResource 
plainAccessResource) {
-        return 
getNetaddressStrategy(plainAccessResource.getWhiteRemoteAddress());
+    public RemoteAddressStrategy getRemoteAddressStrategy(PlainAccessResource 
plainAccessResource) {
+        return 
getRemoteAddressStrategy(plainAccessResource.getWhiteRemoteAddress());
 
     }
 
-    public RemoteAddressStrategy getNetaddressStrategy(String netaddress) {
-        if (StringUtils.isBlank(netaddress) || "*".equals(netaddress)) {
+    public RemoteAddressStrategy getRemoteAddressStrategy(String remoteAddr) {
+        //TODO if the white addr is not configured, should reject it.
+        if (StringUtils.isBlank(remoteAddr) || "*".equals(remoteAddr)) {
             return NULL_NET_ADDRESS_STRATEGY;
         }
-        if (netaddress.endsWith("}")) {
-            String[] strArray = StringUtils.split(netaddress, ".");
+        if (remoteAddr.endsWith("}")) {
+            String[] strArray = StringUtils.split(remoteAddr, ".");
             String four = strArray[3];
             if (!four.startsWith("{")) {
-                throw new 
AclException(String.format("MultipleRemoteAddressStrategy netaddress examine 
scope Exception netaddress", netaddress));
+                throw new 
AclException(String.format("MultipleRemoteAddressStrategy netaddress examine 
scope Exception netaddress", remoteAddr));
             }
-            return new 
MultipleRemoteAddressStrategy(AclUtils.getAddreeStrArray(netaddress, four));
-        } else if (AclUtils.isColon(netaddress)) {
-            return new 
MultipleRemoteAddressStrategy(StringUtils.split(netaddress, ","));
-        } else if (AclUtils.isAsterisk(netaddress) || 
AclUtils.isMinus(netaddress)) {
-            return new RangeRemoteAddressStrategy(netaddress);
+            return new 
MultipleRemoteAddressStrategy(AclUtils.getAddreeStrArray(remoteAddr, four));
+        } else if (AclUtils.isColon(remoteAddr)) {
+            return new 
MultipleRemoteAddressStrategy(StringUtils.split(remoteAddr, ","));
+        } else if (AclUtils.isAsterisk(remoteAddr) || 
AclUtils.isMinus(remoteAddr)) {
+            return new RangeRemoteAddressStrategy(remoteAddr);
         }
-        return new OneRemoteAddressStrategy(netaddress);
+        return new OneRemoteAddressStrategy(remoteAddr);
 
     }
 
@@ -103,10 +104,10 @@ public class RemoteAddressStrategyFactory {
 
         private int index;
 
-        public RangeRemoteAddressStrategy(String netaddress) {
-            String[] strArray = StringUtils.split(netaddress, ".");
+        public RangeRemoteAddressStrategy(String remoteAddr) {
+            String[] strArray = StringUtils.split(remoteAddr, ".");
             if (analysis(strArray, 2) || analysis(strArray, 3)) {
-                AclUtils.verify(netaddress, index - 1);
+                AclUtils.verify(remoteAddr, index - 1);
                 StringBuffer sb = new 
StringBuffer().append(strArray[0].trim()).append(".").append(strArray[1].trim()).append(".");
                 if (index == 3) {
                     sb.append(strArray[2].trim()).append(".");
diff --git 
a/acl/src/test/java/org/apache/rocketmq/acl/common/PermissionTest.java 
b/acl/src/test/java/org/apache/rocketmq/acl/common/PermissionTest.java
index 04a3f8f..2d998cc 100644
--- a/acl/src/test/java/org/apache/rocketmq/acl/common/PermissionTest.java
+++ b/acl/src/test/java/org/apache/rocketmq/acl/common/PermissionTest.java
@@ -29,28 +29,28 @@ public class PermissionTest {
 
     @Test
     public void fromStringGetPermissionTest() {
-        byte perm = Permission.fromStringGetPermission("PUB");
+        byte perm = Permission.parsePermFromString("PUB");
         Assert.assertEquals(perm, Permission.PUB);
 
-        perm = Permission.fromStringGetPermission("SUB");
+        perm = Permission.parsePermFromString("SUB");
         Assert.assertEquals(perm, Permission.SUB);
 
-        perm = Permission.fromStringGetPermission("ANY");
+        perm = Permission.parsePermFromString("ANY");
         Assert.assertEquals(perm, Permission.ANY);
 
-        perm = Permission.fromStringGetPermission("PUB|SUB");
+        perm = Permission.parsePermFromString("PUB|SUB");
         Assert.assertEquals(perm, Permission.ANY);
 
-        perm = Permission.fromStringGetPermission("SUB|PUB");
+        perm = Permission.parsePermFromString("SUB|PUB");
         Assert.assertEquals(perm, Permission.ANY);
 
-        perm = Permission.fromStringGetPermission("DENY");
+        perm = Permission.parsePermFromString("DENY");
         Assert.assertEquals(perm, Permission.DENY);
 
-        perm = Permission.fromStringGetPermission("1");
+        perm = Permission.parsePermFromString("1");
         Assert.assertEquals(perm, Permission.DENY);
 
-        perm = Permission.fromStringGetPermission(null);
+        perm = Permission.parsePermFromString(null);
         Assert.assertEquals(perm, Permission.DENY);
 
     }
@@ -91,17 +91,17 @@ public class PermissionTest {
         PlainAccessResource plainAccessResource = new PlainAccessResource();
         Map<String, Byte> resourcePermMap = 
plainAccessResource.getResourcePermMap();
 
-        Permission.setTopicPerm(plainAccessResource, false, null);
+        Permission.parseResourcePerms(plainAccessResource, false, null);
         Assert.assertNull(resourcePermMap);
 
         List<String> groups = new ArrayList<>();
-        Permission.setTopicPerm(plainAccessResource, false, groups);
+        Permission.parseResourcePerms(plainAccessResource, false, groups);
         Assert.assertNull(resourcePermMap);
 
         groups.add("groupA=DENY");
         groups.add("groupB=PUB|SUB");
         groups.add("groupC=PUB");
-        Permission.setTopicPerm(plainAccessResource, false, groups);
+        Permission.parseResourcePerms(plainAccessResource, false, groups);
         resourcePermMap = plainAccessResource.getResourcePermMap();
 
         byte perm = 
resourcePermMap.get(PlainAccessResource.getRetryTopic("groupA"));
@@ -118,7 +118,7 @@ public class PermissionTest {
         topics.add("topicB=PUB|SUB");
         topics.add("topicC=PUB");
 
-        Permission.setTopicPerm(plainAccessResource, true, topics);
+        Permission.parseResourcePerms(plainAccessResource, true, topics);
 
         perm = resourcePermMap.get("topicA");
         Assert.assertEquals(perm, Permission.DENY);
@@ -131,7 +131,7 @@ public class PermissionTest {
 
         List<String> erron = new ArrayList<>();
         erron.add("");
-        Permission.setTopicPerm(plainAccessResource, false, erron);
+        Permission.parseResourcePerms(plainAccessResource, false, erron);
     }
 
     @Test
@@ -144,7 +144,7 @@ public class PermissionTest {
         code.add(207);
 
         for (int i = 0; i < 400; i++) {
-            boolean boo = Permission.checkAdminCode(i);
+            boolean boo = Permission.needAdminPerm(i);
             if (boo) {
                 Assert.assertTrue(code.contains(i));
             }
diff --git 
a/acl/src/test/java/org/apache/rocketmq/acl/plain/PlainPermissionLoaderTest.java
 
b/acl/src/test/java/org/apache/rocketmq/acl/plain/PlainPermissionLoaderTest.java
index 45004ec..de9b45d 100644
--- 
a/acl/src/test/java/org/apache/rocketmq/acl/plain/PlainPermissionLoaderTest.java
+++ 
b/acl/src/test/java/org/apache/rocketmq/acl/plain/PlainPermissionLoaderTest.java
@@ -27,7 +27,7 @@ import java.util.Set;
 import org.apache.commons.lang3.reflect.FieldUtils;
 import org.apache.rocketmq.acl.common.AclException;
 import org.apache.rocketmq.acl.common.Permission;
-import org.apache.rocketmq.acl.plain.PlainPermissionLoader.PlainAccess;
+import org.apache.rocketmq.acl.plain.PlainPermissionLoader.PlainAccessConfig;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -90,7 +90,7 @@ public class PlainPermissionLoaderTest {
     @Test
     public void getPlainAccessResourceTest() {
         PlainAccessResource plainAccessResource = new PlainAccessResource();
-        PlainAccess plainAccess = new PlainAccess();
+        PlainAccessConfig plainAccess = new PlainAccessConfig();
 
         plainAccess.setAccessKey("RocketMQ");
         plainAccessResource = 
plainPermissionLoader.getPlainAccessResource(plainAccess);
@@ -120,7 +120,7 @@ public class PlainPermissionLoaderTest {
         groups.add("groupA=DENY");
         groups.add("groupB=PUB|SUB");
         groups.add("groupC=PUB");
-        plainAccess.setGroups(groups);
+        plainAccess.setGroupPerms(groups);
         plainAccessResource = 
plainPermissionLoader.getPlainAccessResource(plainAccess);
         Map<String, Byte> resourcePermMap = 
plainAccessResource.getResourcePermMap();
         Assert.assertEquals(resourcePermMap.size(), 3);
@@ -133,7 +133,7 @@ public class PlainPermissionLoaderTest {
         topics.add("topicA=DENY");
         topics.add("topicB=PUB|SUB");
         topics.add("topicC=PUB");
-        plainAccess.setTopics(topics);
+        plainAccess.setTopicPerms(topics);
         plainAccessResource = 
plainPermissionLoader.getPlainAccessResource(plainAccess);
         resourcePermMap = plainAccessResource.getResourcePermMap();
         Assert.assertEquals(resourcePermMap.size(), 6);
@@ -170,25 +170,25 @@ public class PlainPermissionLoaderTest {
     @Test(expected = AclException.class)
     public void accountNullTest() {
         plainAccessResource.setAccessKey(null);
-        plainPermissionLoader.setPlainAccessResource(plainAccessResource);
+        plainPermissionLoader.addPlainAccessResource(plainAccessResource);
     }
 
     @Test(expected = AclException.class)
     public void accountThanTest() {
         plainAccessResource.setAccessKey("123");
-        plainPermissionLoader.setPlainAccessResource(plainAccessResource);
+        plainPermissionLoader.addPlainAccessResource(plainAccessResource);
     }
 
     @Test(expected = AclException.class)
     public void passWordtNullTest() {
         plainAccessResource.setAccessKey(null);
-        plainPermissionLoader.setPlainAccessResource(plainAccessResource);
+        plainPermissionLoader.addPlainAccessResource(plainAccessResource);
     }
 
     @Test(expected = AclException.class)
     public void passWordThanTest() {
         plainAccessResource.setAccessKey("123");
-        plainPermissionLoader.setPlainAccessResource(plainAccessResource);
+        plainPermissionLoader.addPlainAccessResource(plainAccessResource);
     }
 
     @Test(expected = AclException.class)
@@ -200,11 +200,11 @@ public class PlainPermissionLoaderTest {
     @SuppressWarnings("unchecked")
     @Test
     public void cleanAuthenticationInfoTest() throws IllegalAccessException {
-        //plainPermissionLoader.setPlainAccessResource(plainAccessResource);
+        //plainPermissionLoader.addPlainAccessResource(plainAccessResource);
         Map<String, List<PlainAccessResource>> plainAccessResourceMap = 
(Map<String, List<PlainAccessResource>>) 
FieldUtils.readDeclaredField(plainPermissionLoader, "plainAccessResourceMap", 
true);
         Assert.assertFalse(plainAccessResourceMap.isEmpty());
 
-        plainPermissionLoader.cleanAuthenticationInfo();
+        plainPermissionLoader.clearPermissionInfo();
         plainAccessResourceMap = (Map<String, List<PlainAccessResource>>) 
FieldUtils.readDeclaredField(plainPermissionLoader, "plainAccessResourceMap", 
true);
         Assert.assertTrue(plainAccessResourceMap.isEmpty());
     }
diff --git 
a/acl/src/test/java/org/apache/rocketmq/acl/plain/RemoteAddressStrategyTest.java
 
b/acl/src/test/java/org/apache/rocketmq/acl/plain/RemoteAddressStrategyTest.java
index 1d681e0..527c5c2 100644
--- 
a/acl/src/test/java/org/apache/rocketmq/acl/plain/RemoteAddressStrategyTest.java
+++ 
b/acl/src/test/java/org/apache/rocketmq/acl/plain/RemoteAddressStrategyTest.java
@@ -27,35 +27,35 @@ public class RemoteAddressStrategyTest {
     @Test
     public void NetaddressStrategyFactoryTest() {
         PlainAccessResource plainAccessResource = new PlainAccessResource();
-        RemoteAddressStrategy remoteAddressStrategy = 
remoteAddressStrategyFactory.getNetaddressStrategy(plainAccessResource);
+        RemoteAddressStrategy remoteAddressStrategy = 
remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource);
         Assert.assertEquals(remoteAddressStrategy, 
RemoteAddressStrategyFactory.NULL_NET_ADDRESS_STRATEGY);
 
         plainAccessResource.setWhiteRemoteAddress("*");
-        remoteAddressStrategy = 
remoteAddressStrategyFactory.getNetaddressStrategy(plainAccessResource);
+        remoteAddressStrategy = 
remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource);
         Assert.assertEquals(remoteAddressStrategy, 
RemoteAddressStrategyFactory.NULL_NET_ADDRESS_STRATEGY);
 
         plainAccessResource.setWhiteRemoteAddress("127.0.0.1");
-        remoteAddressStrategy = 
remoteAddressStrategyFactory.getNetaddressStrategy(plainAccessResource);
+        remoteAddressStrategy = 
remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource);
         Assert.assertEquals(remoteAddressStrategy.getClass(), 
RemoteAddressStrategyFactory.OneRemoteAddressStrategy.class);
 
         
plainAccessResource.setWhiteRemoteAddress("127.0.0.1,127.0.0.2,127.0.0.3");
-        remoteAddressStrategy = 
remoteAddressStrategyFactory.getNetaddressStrategy(plainAccessResource);
+        remoteAddressStrategy = 
remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource);
         Assert.assertEquals(remoteAddressStrategy.getClass(), 
RemoteAddressStrategyFactory.MultipleRemoteAddressStrategy.class);
 
         plainAccessResource.setWhiteRemoteAddress("127.0.0.{1,2,3}");
-        remoteAddressStrategy = 
remoteAddressStrategyFactory.getNetaddressStrategy(plainAccessResource);
+        remoteAddressStrategy = 
remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource);
         Assert.assertEquals(remoteAddressStrategy.getClass(), 
RemoteAddressStrategyFactory.MultipleRemoteAddressStrategy.class);
 
         plainAccessResource.setWhiteRemoteAddress("127.0.0.1-200");
-        remoteAddressStrategy = 
remoteAddressStrategyFactory.getNetaddressStrategy(plainAccessResource);
+        remoteAddressStrategy = 
remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource);
         Assert.assertEquals(remoteAddressStrategy.getClass(), 
RemoteAddressStrategyFactory.RangeRemoteAddressStrategy.class);
 
         plainAccessResource.setWhiteRemoteAddress("127.0.0.*");
-        remoteAddressStrategy = 
remoteAddressStrategyFactory.getNetaddressStrategy(plainAccessResource);
+        remoteAddressStrategy = 
remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource);
         Assert.assertEquals(remoteAddressStrategy.getClass(), 
RemoteAddressStrategyFactory.RangeRemoteAddressStrategy.class);
 
         plainAccessResource.setWhiteRemoteAddress("127.0.1-20.*");
-        remoteAddressStrategy = 
remoteAddressStrategyFactory.getNetaddressStrategy(plainAccessResource);
+        remoteAddressStrategy = 
remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource);
         Assert.assertEquals(remoteAddressStrategy.getClass(), 
RemoteAddressStrategyFactory.RangeRemoteAddressStrategy.class);
     }
 
@@ -63,9 +63,9 @@ public class RemoteAddressStrategyTest {
     public void verifyTest() {
         PlainAccessResource plainAccessResource = new PlainAccessResource();
         plainAccessResource.setWhiteRemoteAddress("127.0.0.1");
-        
remoteAddressStrategyFactory.getNetaddressStrategy(plainAccessResource);
+        
remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource);
         plainAccessResource.setWhiteRemoteAddress("256.0.0.1");
-        
remoteAddressStrategyFactory.getNetaddressStrategy(plainAccessResource);
+        
remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource);
     }
 
     @Test
@@ -77,7 +77,7 @@ public class RemoteAddressStrategyTest {
     public void oneNetaddressStrategyTest() {
         PlainAccessResource plainAccessResource = new PlainAccessResource();
         plainAccessResource.setWhiteRemoteAddress("127.0.0.1");
-        RemoteAddressStrategy remoteAddressStrategy = 
remoteAddressStrategyFactory.getNetaddressStrategy(plainAccessResource);
+        RemoteAddressStrategy remoteAddressStrategy = 
remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource);
         plainAccessResource.setWhiteRemoteAddress("");
         boolean match = remoteAddressStrategy.match(plainAccessResource);
         Assert.assertFalse(match);
@@ -95,11 +95,11 @@ public class RemoteAddressStrategyTest {
     public void multipleNetaddressStrategyTest() {
         PlainAccessResource plainAccessResource = new PlainAccessResource();
         
plainAccessResource.setWhiteRemoteAddress("127.0.0.1,127.0.0.2,127.0.0.3");
-        RemoteAddressStrategy remoteAddressStrategy = 
remoteAddressStrategyFactory.getNetaddressStrategy(plainAccessResource);
+        RemoteAddressStrategy remoteAddressStrategy = 
remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource);
         multipleNetaddressStrategyTest(remoteAddressStrategy);
 
         plainAccessResource.setWhiteRemoteAddress("127.0.0.{1,2,3}");
-        remoteAddressStrategy = 
remoteAddressStrategyFactory.getNetaddressStrategy(plainAccessResource);
+        remoteAddressStrategy = 
remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource);
         multipleNetaddressStrategyTest(remoteAddressStrategy);
 
     }
@@ -108,7 +108,7 @@ public class RemoteAddressStrategyTest {
     public void multipleNetaddressStrategyExceptionTest() {
         PlainAccessResource plainAccessResource = new PlainAccessResource();
         plainAccessResource.setWhiteRemoteAddress("127.0.0.1,2,3}");
-        
remoteAddressStrategyFactory.getNetaddressStrategy(plainAccessResource);
+        
remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource);
     }
 
     private void multipleNetaddressStrategyTest(RemoteAddressStrategy 
remoteAddressStrategy) {
@@ -140,14 +140,14 @@ public class RemoteAddressStrategyTest {
         String head = "127.0.0.";
         PlainAccessResource plainAccessResource = new PlainAccessResource();
         plainAccessResource.setWhiteRemoteAddress("127.0.0.1-200");
-        RemoteAddressStrategy remoteAddressStrategy = 
remoteAddressStrategyFactory.getNetaddressStrategy(plainAccessResource);
+        RemoteAddressStrategy remoteAddressStrategy = 
remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource);
         rangeNetaddressStrategyTest(remoteAddressStrategy, head, 1, 200, true);
         plainAccessResource.setWhiteRemoteAddress("127.0.0.*");
-        remoteAddressStrategy = 
remoteAddressStrategyFactory.getNetaddressStrategy(plainAccessResource);
+        remoteAddressStrategy = 
remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource);
         rangeNetaddressStrategyTest(remoteAddressStrategy, head, 0, 255, true);
 
         plainAccessResource.setWhiteRemoteAddress("127.0.1-200.*");
-        remoteAddressStrategy = 
remoteAddressStrategyFactory.getNetaddressStrategy(plainAccessResource);
+        remoteAddressStrategy = 
remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource);
         rangeNetaddressStrategyThirdlyTest(remoteAddressStrategy, head, 1, 
200);
     }
 
@@ -196,7 +196,7 @@ public class RemoteAddressStrategyTest {
     private void rangeNetaddressStrategyExceptionTest(String netaddress) {
         PlainAccessResource plainAccessResource = new PlainAccessResource();
         plainAccessResource.setWhiteRemoteAddress(netaddress);
-        
remoteAddressStrategyFactory.getNetaddressStrategy(plainAccessResource);
+        
remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource);
     }
 
 }
diff --git a/acl/src/test/resources/conf/transport.yml 
b/acl/src/test/resources/conf/transport.yml
index 2c3070e..5daefb6 100644
--- a/acl/src/test/resources/conf/transport.yml
+++ b/acl/src/test/resources/conf/transport.yml
@@ -26,11 +26,11 @@ accounts:
   admin: false
   defaultTopicPerm: DENY
   defaultGroupPerm: SUB
-  topics:
+  topicPerms:
   - topicA=DENY
   - topicB=PUB|SUB
   - topicC=SUB
-  groups:
+  groupPerms:
   # the group should convert to retry topic
   - groupA=DENY
   - groupB=SUB
diff --git a/common/src/main/java/org/apache/rocketmq/common/UtilAll.java 
b/common/src/main/java/org/apache/rocketmq/common/UtilAll.java
index a846755..dee6ca2 100644
--- a/common/src/main/java/org/apache/rocketmq/common/UtilAll.java
+++ b/common/src/main/java/org/apache/rocketmq/common/UtilAll.java
@@ -60,6 +60,18 @@ public class UtilAll {
         }
     }
 
+    public static void sleep(long sleepMs) {
+        if (sleepMs < 0) {
+            return;
+        }
+        try {
+            Thread.sleep(sleepMs);
+        } catch (Throwable ignored) {
+
+        }
+
+    }
+
     public static String currentStackTrace() {
         StringBuilder sb = new StringBuilder();
         StackTraceElement[] stackTrace = 
Thread.currentThread().getStackTrace();

Reply via email to