diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/common/util/RouteRule.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/common/util/RouteUtils.java
similarity index 86%
rename from dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/common/util/RouteRule.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/common/util/RouteUtils.java
index 7c48e14..cb2c759 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/common/util/RouteRule.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/common/util/RouteUtils.java
@@ -37,7 +37,7 @@
  * The meaning of Rule: If a request matches When Condition, then use Then Condition to filter providers (only providers match Then Condition will be returned). <br>
  * The process of using Conditions to match consumers and providers is called `Filter`.
  * When Condition are used to filter ConsumersController, while Then Condition are used to filter ProvidersController.
- * RouteRule performs like this: If a Consumer matches When Condition, then only return the ProvidersController matches Then Condition. This means RouteRule should be applied to current Consumer and the providers returned are filtered by RouteRule.<br>
+ * RouteUtils performs like this: If a Consumer matches When Condition, then only return the ProvidersController matches Then Condition. This means RouteUtils should be applied to current Consumer and the providers returned are filtered by RouteUtils.<br>
  *
  * An example of ConditionRoute Rule：<code>
  * key1 = value11,value12 & key2 = value21 & key2 != value22 => key3 = value3 & key4 = value41,vlaue42 & key5 !=value51
@@ -47,9 +47,9 @@
  * Value object, thread safe.
  *
  */
-public class RouteRule {
+public class RouteUtils {
     @SuppressWarnings("unchecked")
-    static RouteRule EMPTY = new RouteRule(Collections.EMPTY_MAP, Collections.EMPTY_MAP);
+    static RouteUtils EMPTY = new RouteUtils(Collections.EMPTY_MAP, Collections.EMPTY_MAP);
     private static Pattern ROUTE_PATTERN = Pattern.compile("([&!=,]*)\\s*([^&!=,\\s]+)");
     private static Pattern CONDITION_SEPERATOR = Pattern.compile("(.*)=>(.*)");
     private static Pattern VALUE_LIST_SEPARATOR = Pattern.compile("\\s*,\\s*");
@@ -58,7 +58,7 @@
     private volatile String tostring = null;
 
     // FIXME
-    private RouteRule(Map<String, MatchPair> when, Map<String, MatchPair> then) {
+    private RouteUtils(Map<String, MatchPair> when, Map<String, MatchPair> then) {
         for (Map.Entry<String, MatchPair> entry : when.entrySet()) {
             entry.getValue().freeze();
         }
@@ -140,16 +140,16 @@
     }
 
     /**
-     * Parse the RouteRule as a string into an object.
+     * Parse the RouteUtils as a string into an object.
      *
-     * @throws ParseException RouteRule string format is wrong. The following input conditions, RouteRule are illegal.
+     * @throws ParseException RouteUtils string format is wrong. The following input conditions, RouteUtils are illegal.
      * <ul> <li> input is <code>null</code>。
      * <li> input is "" or " "。
      * <li> input Rule doesn't have a When Condition
      * <li> input Rule doesn't have a Then Condition
      * </ul>
      */
-    public static RouteRule parse(Route conditionRoute) throws ParseException {
+    public static RouteUtils parse(Route conditionRoute) throws ParseException {
         if (conditionRoute == null)
             throw new ParseException("null conditionRoute!", 0);
 
@@ -160,7 +160,7 @@
         return parse(conditionRoute == null ? null : conditionRoute.getMatchRule(), conditionRoute == null ? null : conditionRoute.getFilterRule());
     }
 
-    public static RouteRule parse(String whenRule, String thenRule) throws ParseException {
+    public static RouteUtils parse(String whenRule, String thenRule) throws ParseException {
         /*if (whenRule == null || whenRule.trim().length() == 0) {
             throw new ParseException("Illegal route rule without when express", 0);
     	}*/
@@ -169,10 +169,10 @@
         }
         Map<String, MatchPair> when = parseRule(whenRule.trim());
         Map<String, MatchPair> then = parseRule(thenRule.trim());
-        return new RouteRule(when, then);
+        return new RouteUtils(when, then);
     }
 
-    public static RouteRule parse(String rule) throws ParseException {
+    public static RouteUtils parse(String rule) throws ParseException {
         if (StringUtils.isBlank(rule)) {
             throw new ParseException("Illegal blank route rule", 0);
         }
@@ -187,7 +187,7 @@
      * @see #parse(String)
      * @throws RuntimeException This is an wrapper exception for the {@link ParseException} thrown by the {@link #parse (String)} method.
      */
-    public static RouteRule parseQuitely(Route conditionRoute) {
+    public static RouteUtils parseQuitely(Route conditionRoute) {
         try {
             return parse(conditionRoute);
         } catch (ParseException e) {
@@ -235,15 +235,10 @@
         existRule.setPriority(conditionRoute.getPriority());
         return existRule;
     }
-    public static BlackWhiteList convertToBlackWhiteList(AccessDTO accessDTO) {
+    public static List<String> convertToBlackWhiteList(AccessDTO accessDTO) {
         if (accessDTO == null) {
             return null;
         }
-        BlackWhiteList blackWhiteList = new BlackWhiteList();
-//        if (StringUtils.isNoneEmpty(accessDTO.getApplication())) {
-//            blackWhiteList.set
-//        }
-//        AccessDTO storeDTO = ConvertUtil.convertDTOtoStore(accessDTO);
 
         Set<String> whiteList = accessDTO.getWhitelist();
         Set<String> blackList = accessDTO.getBlacklist();
@@ -268,11 +263,38 @@
             sb.append(" =>");
             conditions.add(sb.toString());
         }
-        blackWhiteList.setConditions(conditions);
-        return blackWhiteList;
+        return conditions;
     }
 
-    public static AccessDTO convertToAccessDTO(BlackWhiteList blackWhiteList, String scope, String key) {
+    public static List<String> filterBlackWhiteListFromConditions(List<String> conditions) {
+        List<String> result = new ArrayList<>();
+        if (conditions == null || conditions.isEmpty()) {
+            return result;
+        }
+        for (String condition : conditions) {
+            if (isBlackList(condition)) {
+                result.add(condition);
+            } else if (isWhiteList(condition)) {
+                result.add(condition);
+            }
+        }
+        return result;
+    }
+
+    public static List<String> filterConditionRuleFromConditions(List<String> conditions) {
+        List<String> result = new ArrayList<>();
+        if (conditions == null || conditions.isEmpty()) {
+            return result;
+        }
+        for (String condition : conditions) {
+            if (!isBlackList(condition) && !isWhiteList(condition)) {
+                result.add(condition);
+            }
+        }
+        return result;
+    }
+
+    public static AccessDTO convertToAccessDTO(List<String> blackWhiteList, String scope, String key) {
         if (blackWhiteList == null) {
             return null;
         }
@@ -282,8 +304,8 @@
         } else {
             accessDTO.setService(key);
         }
-        if (blackWhiteList.getConditions() != null) {
-            for (String condition : blackWhiteList.getConditions()) {
+        if (blackWhiteList != null) {
+            for (String condition : blackWhiteList) {
                 if (condition.contains("host != ")) {
                     //white list
                     condition = org.apache.commons.lang3.StringUtils.substringBetween(condition, "host !=", " =>").trim();
@@ -306,8 +328,8 @@
         route.setFilterRule("false");
         route.setEnabled(true);
 
-        Map<String, RouteRule.MatchPair> when = new HashMap<>();
-        RouteRule.MatchPair matchPair = new RouteRule.MatchPair(new HashSet<>(), new HashSet<>());
+        Map<String, RouteUtils.MatchPair> when = new HashMap<>();
+        RouteUtils.MatchPair matchPair = new RouteUtils.MatchPair(new HashSet<>(), new HashSet<>());
         when.put(Route.KEY_CONSUMER_HOST, matchPair);
 
         if (accessDTO.getWhitelist() != null) {
@@ -318,7 +340,7 @@
         }
 
         StringBuilder sb = new StringBuilder();
-        RouteRule.contidionToString(sb, when);
+        RouteUtils.contidionToString(sb, when);
         route.setMatchRule(sb.toString());
         return route;
     }
@@ -330,7 +352,7 @@
         } else {
             conditionRouteDTO.setApplication(routingRule.getKey());
         }
-        conditionRouteDTO.setConditions(routingRule.getConditions());
+        conditionRouteDTO.setConditions(RouteUtils.filterConditionRuleFromConditions(routingRule.getConditions()));
         conditionRouteDTO.setPriority(routingRule.getPriority());
         conditionRouteDTO.setEnabled(routingRule.isEnabled());
         conditionRouteDTO.setForce(routingRule.isForce());
@@ -338,7 +360,7 @@
         return conditionRouteDTO;
     }
 
-    public static Route convertBlackWhiteListtoRoute(BlackWhiteList blackWhiteList, String scope, String key) {
+    public static Route convertBlackWhiteListtoRoute(List<String> blackWhiteList, String scope, String key) {
         AccessDTO accessDTO = convertToAccessDTO(blackWhiteList, scope, key);
         return convertAccessDTOtoRoute(accessDTO);
     }
@@ -402,19 +424,19 @@
         return condition;
     }
 
-    public static RouteRule createFromNameAndValueListString(Map<String, String> whenParams, Map<String, String> notWhenParams,
-                                                             Map<String, String> thenParams, Map<String, String> notThenParams) {
+    public static RouteUtils createFromNameAndValueListString(Map<String, String> whenParams, Map<String, String> notWhenParams,
+                                                              Map<String, String> thenParams, Map<String, String> notThenParams) {
         Map<String, MatchPair> when = parseNameAndValueListString2Condition(whenParams, notWhenParams);
         Map<String, MatchPair> then = parseNameAndValueListString2Condition(thenParams, notThenParams);
 
-        return new RouteRule(when, then);
+        return new RouteUtils(when, then);
     }
 
-    public static RouteRule createFromCondition(Map<String, MatchPair> whenCondition, Map<String, MatchPair> thenCondition) {
-        return new RouteRule(whenCondition, thenCondition);
+    public static RouteUtils createFromCondition(Map<String, MatchPair> whenCondition, Map<String, MatchPair> thenCondition) {
+        return new RouteUtils(whenCondition, thenCondition);
     }
 
-    public static RouteRule copyWithRemove(RouteRule copy, Set<String> whenParams, Set<String> thenParams) {
+    public static RouteUtils copyWithRemove(RouteUtils copy, Set<String> whenParams, Set<String> thenParams) {
         Map<String, MatchPair> when = new HashMap<String, MatchPair>();
         for (Entry<String, MatchPair> entry : copy.getWhenCondition().entrySet()) {
             if (whenParams == null || !whenParams.contains(entry.getKey())) {
@@ -429,7 +451,7 @@
             }
         }
 
-        return new RouteRule(when, then);
+        return new RouteUtils(when, then);
     }
 
     /**
@@ -438,9 +460,9 @@
      * @param copy Replace Base
      * @param whenCondition WhenCondition to replace, if Base does not have an item, insert it directly.
      * @param thenCondition ThenCondition to replace, if Base has no items, then insert directly.
-     * @return RouteRule after replacement
+     * @return RouteUtils after replacement
      */
-    public static RouteRule copyWithReplace(RouteRule copy, Map<String, MatchPair> whenCondition, Map<String, MatchPair> thenCondition) {
+    public static RouteUtils copyWithReplace(RouteUtils copy, Map<String, MatchPair> whenCondition, Map<String, MatchPair> thenCondition) {
         if (null == copy) {
             throw new NullPointerException("Argument copy is null!");
         }
@@ -457,7 +479,7 @@
             then.putAll(thenCondition);
         }
 
-        return new RouteRule(when, then);
+        return new RouteUtils(when, then);
     }
 
     // TODO ToString out of the current list is out of order, should we sort?
@@ -573,6 +595,14 @@
         return sb.toString();
     }
 
+    private static boolean isBlackList(String address) {
+        return (address.startsWith("host = ") && address.endsWith(" =>"));
+    }
+
+    private static boolean isWhiteList(String address) {
+        return (address.startsWith("host != ") && address.endsWith(" =>"));
+    }
+
     @Override
     public String toString() {
         if (tostring != null)
@@ -603,7 +633,7 @@
             return false;
         if (getClass() != obj.getClass())
             return false;
-        RouteRule other = (RouteRule) obj;
+        RouteUtils other = (RouteUtils) obj;
         if (thenCondition == null) {
             if (other.thenCondition != null)
                 return false;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
index 6d527ff..a3c6405 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
@@ -20,9 +20,9 @@
 import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.admin.common.exception.ConfigurationException;
 import org.apache.dubbo.admin.common.util.Constants;
-import org.apache.dubbo.admin.data.config.GovernanceConfiguration;
-import org.apache.dubbo.admin.data.metadata.MetaDataCollector;
-import org.apache.dubbo.admin.data.metadata.impl.NoOpMetadataCollector;
+import org.apache.dubbo.admin.registry.config.GovernanceConfiguration;
+import org.apache.dubbo.admin.registry.metadata.MetaDataCollector;
+import org.apache.dubbo.admin.registry.metadata.impl.NoOpMetadataCollector;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.logger.Logger;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/model/store/RoutingRule.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/model/store/RoutingRule.java
index 46b012f..7707e94 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/model/store/RoutingRule.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/model/store/RoutingRule.java
@@ -28,7 +28,7 @@
     private boolean force;
     private boolean runtime;
     private List<String> conditions;
-    private BlackWhiteList blackWhiteList;
+//    private BlackWhiteList blackWhiteList;
 
 
     public String getKey() {
@@ -87,11 +87,11 @@
         this.conditions = conditions;
     }
 
-    public BlackWhiteList getBlackWhiteList() {
-        return blackWhiteList;
-    }
-
-    public void setBlackWhiteList(BlackWhiteList blackWhiteList) {
-        this.blackWhiteList = blackWhiteList;
-    }
+//    public BlackWhiteList getBlackWhiteList() {
+//        return blackWhiteList;
+//    }
+//
+//    public void setBlackWhiteList(BlackWhiteList blackWhiteList) {
+//        this.blackWhiteList = blackWhiteList;
+//    }
 }
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/config/GovernanceConfiguration.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/config/GovernanceConfiguration.java
similarity index 96%
rename from dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/config/GovernanceConfiguration.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/config/GovernanceConfiguration.java
index 8fb75ab..c6ed397 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/config/GovernanceConfiguration.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/config/GovernanceConfiguration.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.admin.data.config;
+package org.apache.dubbo.admin.registry.config;
 
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.SPI;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/config/impl/ApolloConfiguration.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/config/impl/ApolloConfiguration.java
similarity index 95%
rename from dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/config/impl/ApolloConfiguration.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/config/impl/ApolloConfiguration.java
index 2bc0f90..13d4b2e 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/config/impl/ApolloConfiguration.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/config/impl/ApolloConfiguration.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.admin.data.config.impl;
+package org.apache.dubbo.admin.registry.config.impl;
 
 import com.ctrip.framework.apollo.openapi.client.ApolloOpenApiClient;
 import com.ctrip.framework.apollo.openapi.dto.OpenItemDTO;
-import org.apache.dubbo.admin.data.config.GovernanceConfiguration;
+import org.apache.dubbo.admin.registry.config.GovernanceConfiguration;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.SPI;
 import org.springframework.beans.factory.annotation.Value;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/config/impl/NoOpConfiguration.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/config/impl/NoOpConfiguration.java
similarity index 92%
rename from dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/config/impl/NoOpConfiguration.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/config/impl/NoOpConfiguration.java
index 08cb489..85dca2f 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/config/impl/NoOpConfiguration.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/config/impl/NoOpConfiguration.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.admin.data.config.impl;
+package org.apache.dubbo.admin.registry.config.impl;
 
-import org.apache.dubbo.admin.data.config.GovernanceConfiguration;
+import org.apache.dubbo.admin.registry.config.GovernanceConfiguration;
 import org.apache.dubbo.common.URL;
 
 public class NoOpConfiguration implements GovernanceConfiguration {
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/config/impl/ZookeeperConfiguration.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/config/impl/ZookeeperConfiguration.java
similarity index 97%
rename from dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/config/impl/ZookeeperConfiguration.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/config/impl/ZookeeperConfiguration.java
index ffe4b49..0ba847a 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/config/impl/ZookeeperConfiguration.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/config/impl/ZookeeperConfiguration.java
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.admin.data.config.impl;
+package org.apache.dubbo.admin.registry.config.impl;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.retry.ExponentialBackoffRetry;
 import org.apache.dubbo.admin.common.util.Constants;
-import org.apache.dubbo.admin.data.config.GovernanceConfiguration;
+import org.apache.dubbo.admin.registry.config.GovernanceConfiguration;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.URL;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/MetaDataCollector.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/metadata/MetaDataCollector.java
similarity index 95%
rename from dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/MetaDataCollector.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/metadata/MetaDataCollector.java
index 5b5e802..b5974a7 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/MetaDataCollector.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/metadata/MetaDataCollector.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.admin.data.metadata;
+package org.apache.dubbo.admin.registry.metadata;
 
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.SPI;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/impl/NoOpMetadataCollector.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/NoOpMetadataCollector.java
similarity index 91%
rename from dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/impl/NoOpMetadataCollector.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/NoOpMetadataCollector.java
index 8e561a6..3638570 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/impl/NoOpMetadataCollector.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/NoOpMetadataCollector.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.admin.data.metadata.impl;
+package org.apache.dubbo.admin.registry.metadata.impl;
 
-import org.apache.dubbo.admin.data.metadata.MetaDataCollector;
+import org.apache.dubbo.admin.registry.metadata.MetaDataCollector;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.metadata.identifier.MetadataIdentifier;
 
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/impl/RedisMetaDataCollector.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/RedisMetaDataCollector.java
similarity index 94%
rename from dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/impl/RedisMetaDataCollector.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/RedisMetaDataCollector.java
index b00238a..2431b8e 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/impl/RedisMetaDataCollector.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/RedisMetaDataCollector.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.admin.data.metadata.impl;
+package org.apache.dubbo.admin.registry.metadata.impl;
 
 
-import org.apache.dubbo.admin.data.metadata.MetaDataCollector;
+import org.apache.dubbo.admin.registry.metadata.MetaDataCollector;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.metadata.identifier.MetadataIdentifier;
 import redis.clients.jedis.Jedis;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/impl/ZookeeperMetaDataCollector.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/ZookeeperMetaDataCollector.java
similarity index 96%
rename from dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/impl/ZookeeperMetaDataCollector.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/ZookeeperMetaDataCollector.java
index fcab3b0..48c3cf3 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/impl/ZookeeperMetaDataCollector.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/ZookeeperMetaDataCollector.java
@@ -15,13 +15,13 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.admin.data.metadata.impl;
+package org.apache.dubbo.admin.registry.metadata.impl;
 
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.retry.ExponentialBackoffRetry;
 import org.apache.dubbo.admin.common.util.Constants;
-import org.apache.dubbo.admin.data.metadata.MetaDataCollector;
+import org.apache.dubbo.admin.registry.metadata.MetaDataCollector;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/AbstractService.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/AbstractService.java
index 914943d..d9e63d5 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/AbstractService.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/AbstractService.java
@@ -16,8 +16,8 @@
  */
 package org.apache.dubbo.admin.service.impl;
 
-import org.apache.dubbo.admin.data.config.GovernanceConfiguration;
-import org.apache.dubbo.admin.data.metadata.MetaDataCollector;
+import org.apache.dubbo.admin.registry.config.GovernanceConfiguration;
+import org.apache.dubbo.admin.registry.metadata.MetaDataCollector;
 import org.apache.dubbo.admin.service.RegistryServerSync;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.logger.Logger;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java
index b7e7def..bd1272e 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java
@@ -19,13 +19,12 @@
 import org.apache.dubbo.admin.common.exception.ResourceNotFoundException;
 import org.apache.dubbo.admin.common.util.Constants;
 import org.apache.dubbo.admin.common.util.ConvertUtil;
-import org.apache.dubbo.admin.common.util.RouteRule;
+import org.apache.dubbo.admin.common.util.RouteUtils;
 import org.apache.dubbo.admin.common.util.YamlParser;
 import org.apache.dubbo.admin.model.domain.Route;
 import org.apache.dubbo.admin.model.dto.AccessDTO;
 import org.apache.dubbo.admin.model.dto.ConditionRouteDTO;
 import org.apache.dubbo.admin.model.dto.TagRouteDTO;
-import org.apache.dubbo.admin.model.store.BlackWhiteList;
 import org.apache.dubbo.admin.model.store.RoutingRule;
 import org.apache.dubbo.admin.model.store.TagRoute;
 import org.apache.dubbo.admin.service.RouteService;
@@ -53,7 +52,7 @@
         if (existConfig != null) {
             existRule = YamlParser.loadObject(existConfig, RoutingRule.class);
         }
-        existRule = RouteRule.insertConditionRule(existRule, conditionRoute);
+        existRule = RouteUtils.insertConditionRule(existRule, conditionRoute);
         //register2.7
         dynamicConfiguration.setConfig(path, YamlParser.dumpObject(existRule));
 
@@ -74,8 +73,8 @@
             throw new ResourceNotFoundException("no existing condition route for path: " + path);
         }
         RoutingRule routingRule = YamlParser.loadObject(existConfig, RoutingRule.class);
-        ConditionRouteDTO oldConditionRoute = RouteRule.createConditionRouteFromRule(routingRule);
-        routingRule = RouteRule.insertConditionRule(routingRule, newConditionRoute);
+        ConditionRouteDTO oldConditionRoute = RouteUtils.createConditionRouteFromRule(routingRule);
+        routingRule = RouteUtils.insertConditionRule(routingRule, newConditionRoute);
         dynamicConfiguration.setConfig(path, YamlParser.dumpObject(routingRule));
 
         //for 2.6
@@ -98,8 +97,9 @@
             //throw exception
         }
         RoutingRule route = YamlParser.loadObject(config, RoutingRule.class);
-        if (route.getBlackWhiteList() != null) {
-           route.setConditions(null);
+        List<String> blackWhiteList = RouteUtils.filterBlackWhiteListFromConditions(route.getConditions());
+        if (blackWhiteList.size() != 0) {
+           route.setConditions(blackWhiteList);
             dynamicConfiguration.setConfig(path, YamlParser.dumpObject(route));
         } else {
             dynamicConfiguration.deleteConfig(path);
@@ -108,7 +108,7 @@
         //for 2.6
         if (route.getScope().equals(Constants.SERVICE)) {
             RoutingRule originRule = YamlParser.loadObject(config, RoutingRule.class);
-            ConditionRouteDTO conditionRouteDTO = RouteRule.createConditionRouteFromRule(originRule);
+            ConditionRouteDTO conditionRouteDTO = RouteUtils.createConditionRouteFromRule(originRule);
             Route old = convertRouteToOldRoute(conditionRouteDTO);
             registry.unregister(old.toUrl().addParameter(Constants.COMPATIBLE_CONFIG, true));
         }
@@ -120,16 +120,17 @@
         String config = dynamicConfiguration.getConfig(path);
         if (config != null) {
             RoutingRule ruleDTO = YamlParser.loadObject(config, RoutingRule.class);
-            BlackWhiteList old = ruleDTO.getBlackWhiteList();
-            if (ruleDTO.getConditions() == null) {
+            List<String> blackWhiteList = RouteUtils.filterBlackWhiteListFromConditions(ruleDTO.getConditions());
+            List<String> conditions = RouteUtils.filterConditionRuleFromConditions(ruleDTO.getConditions());
+            if (conditions.size() == 0) {
                 dynamicConfiguration.deleteConfig(path);
             } else {
-                ruleDTO.setBlackWhiteList(null);
+                ruleDTO.setConditions(conditions);
                 dynamicConfiguration.setConfig(path, YamlParser.dumpObject(ruleDTO));
             }
             //2.6
-            if (ruleDTO.getScope().equals(Constants.SERVICE) && old != null) {
-                Route route = RouteRule.convertBlackWhiteListtoRoute(old, Constants.SERVICE, id);
+            if (ruleDTO.getScope().equals(Constants.SERVICE) && blackWhiteList.size() > 0) {
+                Route route = RouteUtils.convertBlackWhiteListtoRoute(blackWhiteList, Constants.SERVICE, id);
                 registry.unregister(route.toUrl());
             }
         }
@@ -140,7 +141,7 @@
         String id = ConvertUtil.getIdFromDTO(accessDTO);
         String path = getPath(id, Constants.CONDITION_ROUTE);
         String config = dynamicConfiguration.getConfig(path);
-        BlackWhiteList blackWhiteList = RouteRule.convertToBlackWhiteList(accessDTO);
+        List<String> blackWhiteList = RouteUtils.convertToBlackWhiteList(accessDTO);
         RoutingRule ruleDTO;
         if (config == null) {
             ruleDTO = new RoutingRule();
@@ -151,19 +152,20 @@
                 ruleDTO.setScope(Constants.SERVICE);
             }
             ruleDTO.setKey(id);
-            ruleDTO.setBlackWhiteList(blackWhiteList);
+            ruleDTO.setConditions(blackWhiteList);
         } else {
             ruleDTO = YamlParser.loadObject(config, RoutingRule.class);
-            if (ruleDTO.getBlackWhiteList() != null) {
-                //todo throw exception
+            if (ruleDTO.getConditions() == null) {
+                ruleDTO.setConditions(blackWhiteList);
+            } else {
+                ruleDTO.getConditions().addAll(blackWhiteList);
             }
-            ruleDTO.setBlackWhiteList(blackWhiteList);
         }
         dynamicConfiguration.setConfig(path, YamlParser.dumpObject(ruleDTO));
 
         //for 2.6
         if (ruleDTO.getScope().equals("service")) {
-            Route route = RouteRule.convertAccessDTOtoRoute(accessDTO);
+            Route route = RouteUtils.convertAccessDTOtoRoute(accessDTO);
             registry.register(route.toUrl());
         }
 
@@ -175,8 +177,8 @@
         String config = dynamicConfiguration.getConfig(path);
         if (config != null) {
             RoutingRule ruleDTO = YamlParser.loadObject(config, RoutingRule.class);
-            BlackWhiteList blackWhiteList = ruleDTO.getBlackWhiteList();
-            return RouteRule.convertToAccessDTO(blackWhiteList, ruleDTO.getScope(), ruleDTO.getKey());
+            List<String> blackWhiteList = RouteUtils.filterBlackWhiteListFromConditions(ruleDTO.getConditions());
+            return RouteUtils.convertToAccessDTO(blackWhiteList, ruleDTO.getScope(), ruleDTO.getKey());
         }
         return null;
     }
@@ -185,20 +187,22 @@
     public void updateAccess(AccessDTO accessDTO) {
         String key = ConvertUtil.getIdFromDTO(accessDTO);
         String path = getPath(key, Constants.CONDITION_ROUTE);
-        BlackWhiteList blackWhiteList = RouteRule.convertToBlackWhiteList(accessDTO);
-        BlackWhiteList old = null;
+        List<String> blackWhiteList = RouteUtils.convertToBlackWhiteList(accessDTO);
         String config = dynamicConfiguration.getConfig(path);
+        List<String> oldList = null;
         if (config != null) {
             RoutingRule ruleDTO = YamlParser.loadObject(config, RoutingRule.class);
-            old = ruleDTO.getBlackWhiteList();
-            ruleDTO.setBlackWhiteList(blackWhiteList);
+            oldList = RouteUtils.filterBlackWhiteListFromConditions(ruleDTO.getConditions());
+            List<String> conditions = RouteUtils.filterConditionRuleFromConditions(ruleDTO.getConditions());
+            conditions.addAll(blackWhiteList);
+            ruleDTO.setConditions(conditions);
             dynamicConfiguration.setConfig(path, YamlParser.dumpObject(ruleDTO));
         }
 
         //2.6
         if (StringUtils.isNotEmpty(accessDTO.getService())) {
-            Route oldRoute = RouteRule.convertBlackWhiteListtoRoute(old, Constants.SERVICE, key);
-            Route newRoute = RouteRule.convertAccessDTOtoRoute(accessDTO);
+            Route oldRoute = RouteUtils.convertBlackWhiteListtoRoute(oldList, Constants.SERVICE, key);
+            Route newRoute = RouteUtils.convertAccessDTOtoRoute(accessDTO);
             registry.unregister(oldRoute.toUrl());
             registry.register(newRoute.toUrl());
         }
@@ -213,7 +217,7 @@
 
             if (ruleDTO.getScope().equals(Constants.SERVICE)) {
                 //for2.6
-                URL oldURL = convertRouteToOldRoute(RouteRule.createConditionRouteFromRule(ruleDTO)).toUrl().addParameter(Constants.COMPATIBLE_CONFIG, true);
+                URL oldURL = convertRouteToOldRoute(RouteUtils.createConditionRouteFromRule(ruleDTO)).toUrl().addParameter(Constants.COMPATIBLE_CONFIG, true);
                 registry.unregister(oldURL);
                 oldURL = oldURL.addParameter("enabled", true);
                 registry.register(oldURL);
@@ -235,7 +239,7 @@
 
             if (routeRule.getScope().equals(Constants.SERVICE)) {
                 //for 2.6
-                URL oldURL = convertRouteToOldRoute(RouteRule.createConditionRouteFromRule(routeRule)).toUrl().addParameter(Constants.COMPATIBLE_CONFIG,true);
+                URL oldURL = convertRouteToOldRoute(RouteUtils.createConditionRouteFromRule(routeRule)).toUrl().addParameter(Constants.COMPATIBLE_CONFIG,true);
                 registry.unregister(oldURL);
                 oldURL = oldURL.addParameter("enabled", false);
                 registry.register(oldURL);
@@ -254,7 +258,7 @@
         String config = dynamicConfiguration.getConfig(path);
         if (config != null) {
             RoutingRule routingRule = YamlParser.loadObject(config, RoutingRule.class);
-            ConditionRouteDTO conditionRouteDTO = RouteRule.createConditionRouteFromRule(routingRule);
+            ConditionRouteDTO conditionRouteDTO = RouteUtils.createConditionRouteFromRule(routingRule);
             return conditionRouteDTO;
         }
         return null;
@@ -264,7 +268,7 @@
     public void createTagRoute(TagRouteDTO tagRoute) {
         String id = ConvertUtil.getIdFromDTO(tagRoute);
         String path = getPath(id,Constants.TAG_ROUTE);
-        TagRoute store = RouteRule.convertTagroutetoStore(tagRoute);
+        TagRoute store = RouteUtils.convertTagroutetoStore(tagRoute);
         dynamicConfiguration.setConfig(path, YamlParser.dumpObject(store));
     }
 
@@ -276,7 +280,7 @@
             throw new ResourceNotFoundException("can not find tagroute: " + id);
             //throw exception
         }
-        TagRoute store = RouteRule.convertTagroutetoStore(tagRoute);
+        TagRoute store = RouteUtils.convertTagroutetoStore(tagRoute);
         dynamicConfiguration.setConfig(path, YamlParser.dumpObject(store));
 
     }
@@ -317,16 +321,16 @@
         String config = dynamicConfiguration.getConfig(path);
         if (config != null) {
             TagRoute tagRoute = YamlParser.loadObject(config, TagRoute.class);
-            return RouteRule.convertTagroutetoDisplay(tagRoute);
+            return RouteUtils.convertTagroutetoDisplay(tagRoute);
         }
         return null;
     }
 
     private String getPath(String key, String type) {
         if (type.equals(Constants.CONDITION_ROUTE)) {
-            return prefix + Constants.PATH_SEPARATOR + key + Constants.PATH_SEPARATOR + "routers";
+            return prefix + Constants.PATH_SEPARATOR + key + Constants.PATH_SEPARATOR + "condition-route";
         } else {
-            return prefix + Constants.PATH_SEPARATOR + key + Constants.PATH_SEPARATOR + "tagrouters";
+            return prefix + Constants.PATH_SEPARATOR + key + Constants.PATH_SEPARATOR + "tag-route";
         }
     }
 
diff --git a/dubbo-admin-frontend/src/components/ServiceSearch.vue b/dubbo-admin-frontend/src/components/ServiceSearch.vue
index 69ebfda..34af1f6 100644
--- a/dubbo-admin-frontend/src/components/ServiceSearch.vue
+++ b/dubbo-admin-frontend/src/components/ServiceSearch.vue
@@ -242,7 +242,7 @@
         if (version != null) {
           query = query + '&version=' + version
         }
-        return '/#/serviceDetail?' + query
+        return '#/serviceDetail?' + query
       },
       governanceHref: function (type, service, group, version) {
         let base = '/#/governance/' + type
diff --git a/dubbo-admin-frontend/src/components/governance/AccessControl.vue b/dubbo-admin-frontend/src/components/governance/AccessControl.vue
index bd6513e..f67fb62 100644
--- a/dubbo-admin-frontend/src/components/governance/AccessControl.vue
+++ b/dubbo-admin-frontend/src/components/governance/AccessControl.vue
@@ -87,8 +87,16 @@
                           class="mr-2"
                           color="blue"
                           slot="activator"
-                          @click="toEdit(props.item)">edit</v-icon>
-                  <span>Edit</span>
+                          @click="toEdit(props.item, true)">view</v-icon>
+                  <span>{{$t('view')}}</span>
+                </v-tooltip>
+                <v-tooltip bottom>
+                  <v-icon small
+                          class="mr-2"
+                          color="blue"
+                          slot="activator"
+                          @click="toEdit(props.item, false)">edit</v-icon>
+                  <span>{{$t('edit')}}</span>
                 </v-tooltip>
                 <v-tooltip bottom>
                   <v-icon small
@@ -96,7 +104,7 @@
                           slot="activator"
                           color="red"
                           @click="toDelete(props.item)">delete</v-icon>
-                  <span>Delete</span>
+                  <span>{{$t('delete')}}</span>
                 </v-tooltip>
               </td>
             </template>
@@ -144,18 +152,37 @@
         </v-card-title>
         <v-card-text>
           <v-form ref="modalForm">
-            <v-text-field label="Service Unique ID"
-                          :hint="$t('dataIdHint')"
-                          :readonly="modal.id != null"
-                          v-model="modal.service" />
+            <v-text-field
+              label="Service Unique ID"
+              :hint="$t('dataIdHint')"
+              :readonly="modal.readonly"
+              v-model="modal.service"
+            ></v-text-field>
             <v-text-field
               :label="$t('appName')"
               :hint="$t('appNameHint')"
-              :readonly="modal.id != null"
+              :readonly="modal.readonly"
               v-model="modal.application"
             ></v-text-field>
-            <v-subheader class="pa-0 mt-3">BLACK/WHITE LIST CONTENT</v-subheader>
-            <ace-editor v-model="modal.content" />
+            <v-layout row justify-space-between>
+              <v-flex >
+                <v-text-field
+                  :readonly="modal.readonly"
+                  :label="$t('whiteList')"
+                  v-modal="modal.whiteList"
+                  :hint="$t('whiteListHint')">
+                </v-text-field>
+              </v-flex>
+              <v-spacer></v-spacer>
+              <v-flex>
+                <v-text-field
+                  :label="$t('blackList')"
+                  :hint="$t('blackListHint')"
+                  v-modal="modal.blackList"
+                  :readonly="modal.id != null">
+                </v-text-field>
+              </v-flex>
+            </v-layout>
           </v-form>
         </v-card-text>
         <v-card-actions>
@@ -191,7 +218,6 @@
 </template>
 
 <script>
-import yaml from 'js-yaml'
 import AceEditor from '@/components/public/AceEditor'
 import Search from '@/components/public/Search'
 
@@ -210,6 +236,7 @@
     accesses: [],
     modal: {
       enable: false,
+      readonly: false,
       title: 'Create New',
       saveBtn: 'Create',
       click: () => {},
@@ -217,6 +244,8 @@
       service: null,
       application: null,
       content: '',
+      blackList: '',
+      whiteList: '',
       template:
         'blacklist:\n' +
         '  - 1.1.1.1\n' +
@@ -311,18 +340,20 @@
       })
     },
     createItem () {
-      let doc = yaml.load(this.modal.content)
+      // let doc = yaml.load(this.modal.content)
       this.filter = ''
       if (!this.modal.service && !this.modal.application) {
         this.$notify.error('Either service or application is needed')
         return
       }
       let vm = this
+      let blackList = this.modal.blackList.split(',')
+      let whiteList = this.modal.whiteList.split(',')
       this.$axios.post('/rules/access', {
         service: this.modal.service,
         application: this.modal.application,
-        whitelist: doc.whitelist,
-        blacklist: doc.blacklist
+        whitelist: whiteList,
+        blacklist: blackList
       }).then(response => {
         if (response.status === 201) {
           if (vm.modal.service) {
@@ -338,7 +369,7 @@
         this.showSnackbar('success', 'Create success')
       }).catch(error => this.showSnackbar('error', error.response.data.message))
     },
-    toEdit (item) {
+    toEdit (item, readonly) {
       let itemId = null
       if (this.selected === 0) {
         itemId = item.service
@@ -350,21 +381,26 @@
       }
       Object.assign(this.modal, {
         enable: true,
+        readonly: readonly,
         title: 'Edit',
         saveBtn: 'Update',
         click: this.editItem,
         id: itemId,
         service: item.service,
         application: item.application,
-        content: yaml.safeDump({blacklist: item.blacklist, whitelist: item.whitelist})
+        whiteList: item.whitelist,
+        blackList: item.blacklist
+        // content: yaml.safeDump({blacklist: item.blacklist, whitelist: item.whitelist})
       })
     },
     editItem () {
-      let doc = yaml.load(this.modal.content)
+      // let doc = yaml.load(this.modal.content)
+      let blackList = this.modal.blackList.split(',')
+      let whiteList = this.modal.whiteList.split(',')
       let vm = this
       this.$axios.put('/rules/access/' + this.modal.id, {
-        whitelist: doc.whitelist,
-        blacklist: doc.blacklist,
+        whitelist: whiteList,
+        blacklist: blackList,
         application: this.modal.application,
         service: this.modal.service
 
diff --git a/dubbo-admin-frontend/src/components/governance/LoadBalance.vue b/dubbo-admin-frontend/src/components/governance/LoadBalance.vue
index 0424a88..6a1eb56 100644
--- a/dubbo-admin-frontend/src/components/governance/LoadBalance.vue
+++ b/dubbo-admin-frontend/src/components/governance/LoadBalance.vue
@@ -119,20 +119,39 @@
             label="Service Unique ID"
             :hint="$t('dataIdHint')"
             v-model="service"
+            :readonly="readonly"
           ></v-text-field>
           <v-text-field
             :label="$t('appName')"
             :hint="$t('appNameHint')"
             v-model="application"
+            :readonly="readonly"
           ></v-text-field>
-          <v-subheader class="pa-0 mt-3">RULE CONTENT</v-subheader>
-          <ace-editor v-model="ruleText" :readonly="readonly"/>
+          <v-layout row justify-space-between>
+            <v-flex >
+              <v-text-field
+                :label="$t('method')"
+                :hint="$t('methodHint')"
+                v-model="rule.method"
+                :readonly="readonly"
+              ></v-text-field>
+            </v-flex>
+            <v-spacer></v-spacer>
+            <v-flex>
+              <v-select
+                :items="rule.strategyKey"
+                :label="$t('strategy')"
+                v-model="rule.strategy"
+                :readonly="readonly"
+              ></v-select>
+            </v-flex>
+          </v-layout>
 
         </v-card-text>
         <v-card-actions>
           <v-spacer></v-spacer>
-          <v-btn color="darken-1" flat @click.native="closeDialog">Close</v-btn>
-          <v-btn color="primary darken-1" depressed @click.native="saveItem">Save</v-btn>
+          <v-btn color="darken-1" flat @click.native="closeDialog">{{$t('close')}}</v-btn>
+          <v-btn color="primary darken-1" depressed @click.native="saveItem">{{$t('save')}}</v-btn>
         </v-card-actions>
       </v-card>
     </v-dialog>
@@ -143,8 +162,8 @@
         <v-card-text >{{this.warnText}}</v-card-text>
         <v-card-actions>
           <v-spacer></v-spacer>
-          <v-btn color="darken-1" flat @click.native="closeWarn">CANCLE</v-btn>
-          <v-btn color="primary darken-1" depressed @click.native="deleteItem(warnStatus.id)">CONFIRM</v-btn>
+          <v-btn color="darken-1" flat @click.native="closeWarn">{{$t('cancel')}}</v-btn>
+          <v-btn color="primary darken-1" depressed @click.native="deleteItem(warnStatus.id)">{{$t('confirm')}}</v-btn>
         </v-card-actions>
       </v-card>
     </v-dialog>
@@ -153,7 +172,6 @@
 
 </template>
 <script>
-  import yaml from 'js-yaml'
   import AceEditor from '@/components/public/AceEditor'
   import Search from '@/components/public/Search'
   export default {
@@ -189,6 +207,25 @@
       template:
         'methodName: *  # * for all methods\n' +
         'strategy:  # leastactive, random, roundrobin',
+      rule: {
+        method: '',
+        strategy: '',
+        strategyKey: [
+          {
+            text: 'Least Active',
+            value: 'leastactive'
+          },
+          {
+            text: 'Random',
+            value: 'random'
+          },
+          {
+            text: 'Round Robin',
+            value: 'roundrobin'
+          }
+
+        ]
+      },
       ruleText: '',
       readonly: false,
       serviceHeaders: [],
@@ -230,7 +267,7 @@
 
           },
           {
-            text: this.$('operation'),
+            text: this.$t('operation'),
             value: 'operation',
             sortable: false,
             width: '115px'
@@ -278,7 +315,8 @@
       },
       saveItem: function () {
         this.ruleText = this.verifyRuleText(this.ruleText)
-        let balancing = yaml.safeLoad(this.ruleText)
+        // let balancing = yaml.safeLoad(this.ruleText)
+        let balancing = {}
         if (!this.service && !this.application) {
           this.$notify.error('Either service or application is needed')
           return
@@ -286,6 +324,8 @@
         let vm = this
         balancing.service = this.service
         balancing.application = this.application
+        balancing.methodName = this.rule.method
+        balancing.strategy = this.rule.strategy
         if (this.updateId) {
           if (this.updateId === 'close') {
             this.closeDialog()
@@ -363,10 +403,12 @@
       handleBalance: function (balancing, readonly) {
         this.service = balancing.service
         this.application = balancing.application
-        delete balancing.service
-        delete balancing.application
-        delete balancing.id
-        this.ruleText = yaml.safeDump(balancing)
+        // delete balancing.service
+        // delete balancing.application
+        // delete balancing.id
+        // this.ruleText = yaml.safeDump(balancing)
+        this.rule.method = balancing.methodName
+        this.rule.strategy = balancing.strategy
         this.readonly = readonly
         this.dialog = true
       },
diff --git a/dubbo-admin-frontend/src/components/governance/WeightAdjust.vue b/dubbo-admin-frontend/src/components/governance/WeightAdjust.vue
index b5332cc..60515cd 100644
--- a/dubbo-admin-frontend/src/components/governance/WeightAdjust.vue
+++ b/dubbo-admin-frontend/src/components/governance/WeightAdjust.vue
@@ -118,16 +118,33 @@
             label="Service Unique ID"
             :hint="$t('serviceIdHint')"
             v-model="service"
+            :readonly="readonly"
           ></v-text-field>
           <v-text-field
             :label="$t('appName')"
             :hint="$t('appNameHint')"
             v-model="application"
+            :readonly="readonly"
           ></v-text-field>
-          <v-subheader class="pa-0 mt-3">{{$t('ruleContent')}}</v-subheader>
-
-          <ace-editor v-model="ruleText" :readonly="readonly"></ace-editor>
-
+          <v-layout row justify-space-between>
+            <v-flex >
+              <v-text-field
+                :label="$t('weight')"
+                :hint="$t('weightHint')"
+                v-model="rule.weight"
+                :readonly="readonly"
+              ></v-text-field>
+            </v-flex>
+            <v-spacer></v-spacer>
+            <v-flex>
+              <v-text-field
+                :label="$t('address')"
+                :hint="$t('weightAddressHint')"
+                v-model="rule.address"
+                :readonly="readonly"
+              ></v-text-field>
+            </v-flex>
+          </v-layout>
         </v-card-text>
         <v-card-actions>
           <v-spacer></v-spacer>
@@ -154,7 +171,6 @@
 
 <script>
   import AceEditor from '@/components/public/AceEditor'
-  import yaml from 'js-yaml'
   import Search from '@/components/public/Search'
   export default {
     components: {
@@ -181,9 +197,9 @@
       warnStatus: {},
       height: 0,
       operations: [
-        {id: 0, icon: 'visibility', tooltip: 'View'},
-        {id: 1, icon: 'edit', tooltip: 'Edit'},
-        {id: 3, icon: 'delete', tooltip: 'Delete'}
+        {id: 0, icon: 'visibility', tooltip: 'view'},
+        {id: 1, icon: 'edit', tooltip: 'edit'},
+        {id: 3, icon: 'delete', tooltip: 'delete'}
       ],
       weights: [
       ],
@@ -193,6 +209,10 @@
         '  - 192.168.0.1\n' +
         '  - 192.168.0.2',
       ruleText: '',
+      rule: {
+        weight: 100,
+        address: ''
+      },
       readonly: false,
       serviceHeaders: [],
       appHeaders: []
@@ -261,6 +281,8 @@
       },
       closeDialog: function () {
         this.ruleText = this.template
+        this.rule.address = ''
+        this.rule.weight = 100
         this.service = ''
         this.dialog = false
         this.readonly = false
@@ -280,13 +302,16 @@
         this.warn = false
       },
       saveItem: function () {
-        let weight = yaml.safeLoad(this.ruleText)
+        let weight = {}
+        // let weight = yaml.safeLoad(this.ruleText)
         if (!this.service && !this.application) {
           this.$notify.error('Either service or application is needed')
           return
         }
         weight.service = this.service
         weight.application = this.application
+        weight.weight = this.rule.weight
+        weight.addresses = this.rule.address.split(',')
         let vm = this
         if (this.updateId) {
           if (this.updateId === 'close') {
@@ -365,9 +390,11 @@
       handleWeight: function (weight, readonly) {
         this.service = weight.service
         this.application = weight.application
-        delete weight.service
-        delete weight.application
-        this.ruleText = yaml.safeDump(weight)
+        // delete weight.service
+        // delete weight.application
+        // this.ruleText = yaml.safeDump(weight)
+        this.rule.weight = weight.weight
+        this.rule.address = weight.addresses.join(',')
         this.readonly = readonly
         this.dialog = true
       },
diff --git a/dubbo-admin-frontend/src/lang/en.js b/dubbo-admin-frontend/src/lang/en.js
index 028a760..520e144 100644
--- a/dubbo-admin-frontend/src/lang/en.js
+++ b/dubbo-admin-frontend/src/lang/en.js
@@ -47,9 +47,9 @@
   method: 'Method',
   weight: 'Weight',
   create: 'CREATE',
-  save: 'Save',
+  save: 'SAVE',
   cancel: 'CANCEL',
-  close: 'Close',
+  close: 'CLOSE',
   confirm: 'CONFIRM',
   ruleContent: 'RULE CONTENT',
   createNewRoutingRule: 'Create New Routing Rule',
@@ -79,5 +79,15 @@
   parameterList: 'parameterList',
   returnType: 'returnType',
   here: 'here',
-  configAddress: 'https://github.com/apache/incubator-dubbo-ops/wiki/Dubbo-Admin-configuration'
+  configAddress: 'https://github.com/apache/incubator-dubbo-ops/wiki/Dubbo-Admin-configuration',
+  whiteList: 'White List',
+  whiteListHint: 'White list IP address, divided by comma: 1.1.1.1,2.2.2.2',
+  blackList: 'Black List',
+  blackListHint: 'Black list IP address, divided by comma: 3.3.3.3,4.4.4.4',
+  address: 'Address',
+  weightAddressHint: 'IP addresses to set this weight, divided by comma: 1.1.1.1,2.2.2.2',
+  weightHint: 'weight value, default is 100',
+  methodHint: 'choose method of load balancing, * for all methods',
+  strategy: 'Strategy',
+  balanceStrategyHint: 'load balancing strategy'
 }
diff --git a/dubbo-admin-frontend/src/lang/zh.js b/dubbo-admin-frontend/src/lang/zh.js
index b4acdeb..490afac 100644
--- a/dubbo-admin-frontend/src/lang/zh.js
+++ b/dubbo-admin-frontend/src/lang/zh.js
@@ -79,5 +79,15 @@
   returnType: '返回值',
   noMetadataHint: '无元数据信息，请升级至Dubbo2.7及以上版本，或者查看application.properties中关于config center的配置，详见',
   here: '这里',
-  configAddress: 'https://github.com/apache/incubator-dubbo-ops/wiki/Dubbo-Admin%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E'
+  configAddress: 'https://github.com/apache/incubator-dubbo-ops/wiki/Dubbo-Admin%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E',
+  whiteList: '白名单',
+  whiteListHint: '白名单IP列表, 多个地址用逗号分隔: 1.1.1.1,2.2.2.2',
+  blackList: '黑名单',
+  blackListHint: '黑名单IP列表, 多个地址用逗号分隔: 3.3.3.3,4.4.4.4',
+  address: '地址列表',
+  weightAddressHint: '此权重设置的IP地址,用逗号分隔: 1.1.1.1,2.2.2.2',
+  weightHint: '权重值，默认100',
+  methodHint: '负载均衡生效的方法，*代表所有方法',
+  strategy: '策略',
+  balanceStrategyHint: '负载均衡策略'
 }
