add authorization for zookeeper group (#208)
* add authorization for zookeeper group
* change registry name
* change properties's key name
* retry
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 6715cab..6d527ff 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
@@ -19,9 +19,7 @@
import org.apache.commons.lang3.StringUtils;
import org.apache.dubbo.admin.common.exception.ConfigurationException;
-import org.apache.dubbo.admin.common.exception.ParamValidationException;
import org.apache.dubbo.admin.common.util.Constants;
-import org.apache.dubbo.admin.controller.AccessesController;
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;
@@ -45,14 +43,18 @@
@Value("${dubbo.config-center:}")
private String configCenter;
+ @Value("${dubbo.config-center.username:}")
+ private String username;
+ @Value("${dubbo.config-center.password:}")
+ private String password;
@Value("${dubbo.registry.address:}")
private String registryAddress;
+ @Value("${dubbo.registry.group:}")
+ private String group;
private static String globalConfigPath = "config/dubbo/dubbo.properties";
- @Value("${dubbo.registry.group:}")
- private String group;
private static final Logger logger = LoggerFactory.getLogger(ConfigCenter.class);
private URL configCenterUrl;
@@ -68,7 +70,7 @@
GovernanceConfiguration dynamicConfiguration = null;
if (StringUtils.isNotEmpty(configCenter)) {
- configCenterUrl = formUrl(configCenter, group);
+ configCenterUrl = formUrl(configCenter, group, username, password);
dynamicConfiguration = ExtensionLoader.getExtensionLoader(GovernanceConfiguration.class).getExtension(configCenterUrl.getProtocol());
dynamicConfiguration.setUrl(configCenterUrl);
dynamicConfiguration.init();
@@ -77,16 +79,16 @@
if (StringUtils.isNotEmpty(config)) {
Arrays.stream(config.split("\n")).forEach( s -> {
if(s.startsWith(Constants.REGISTRY_ADDRESS)) {
- registryUrl = formUrl(s.split("=")[1].trim(), group);
+ registryUrl = formUrl(s.split("=")[1].trim(), group, username, password);
} else if (s.startsWith(Constants.METADATA_ADDRESS)) {
- metadataUrl = formUrl(s.split("=")[1].trim(), group);
+ metadataUrl = formUrl(s.split("=")[1].trim(), group, username, password);
}
});
}
}
if (dynamicConfiguration == null) {
if (StringUtils.isNotEmpty(registryAddress)) {
- registryUrl = formUrl(registryAddress, group);
+ registryUrl = formUrl(registryAddress, group, username, password);
dynamicConfiguration = ExtensionLoader.getExtensionLoader(GovernanceConfiguration.class).getExtension(registryUrl.getProtocol());
dynamicConfiguration.setUrl(registryUrl);
dynamicConfiguration.init();
@@ -110,7 +112,7 @@
if (StringUtils.isBlank(registryAddress)) {
throw new ConfigurationException("Either config center or registry address is needed, please refer to https://github.com/apache/incubator-dubbo-ops/wiki/Dubbo-Admin-configuration");
}
- registryUrl = formUrl(registryAddress, group);
+ registryUrl = formUrl(registryAddress, group, username, password);
}
RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
registry = registryFactory.getRegistry(registryUrl);
@@ -134,10 +136,16 @@
return metaDataCollector;
}
- private URL formUrl(String config, String group) {
+ private URL formUrl(String config, String group, String username, String password) {
URL url = URL.valueOf(config);
if (StringUtils.isNotEmpty(group)) {
- url.addParameter(org.apache.dubbo.common.Constants.GROUP_KEY, group);
+ url = url.addParameter(org.apache.dubbo.common.Constants.GROUP_KEY, group);
+ }
+ if (StringUtils.isNotEmpty(username)) {
+ url = url.setUsername(username);
+ }
+ if (StringUtils.isNotEmpty(password)) {
+ url = url.setPassword(password);
}
return url;
}
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/data/config/impl/ZookeeperConfiguration.java
index c0540d5..ffe4b49 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/data/config/impl/ZookeeperConfiguration.java
@@ -17,6 +17,7 @@
package org.apache.dubbo.admin.data.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;
@@ -45,7 +46,15 @@
@Override
public void init() {
- zkClient = CuratorFrameworkFactory.newClient(url.getAddress(), new ExponentialBackoffRetry(1000, 3));
+ CuratorFrameworkFactory.Builder zkClientBuilder = CuratorFrameworkFactory.builder().
+ connectString(url.getAddress()).
+ retryPolicy(new ExponentialBackoffRetry(1000, 3));
+ if(StringUtils.isNotEmpty(url.getUsername()) && StringUtils.isNotEmpty(url.getPassword())){
+ // add authorization
+ String auth = url.getUsername() + ":" + url.getPassword();
+ zkClientBuilder.authorization("digest", auth.getBytes());
+ }
+ zkClient = zkClientBuilder.build();
String group = url.getParameter(Constants.GROUP_KEY, Constants.DEFAULT_ROOT);
if (!group.startsWith(Constants.PATH_SEPARATOR)) {
group = Constants.PATH_SEPARATOR + group;
diff --git a/dubbo-admin-backend/src/main/resources/application.properties b/dubbo-admin-backend/src/main/resources/application.properties
index 687e7a3..28fa8d0 100644
--- a/dubbo-admin-backend/src/main/resources/application.properties
+++ b/dubbo-admin-backend/src/main/resources/application.properties
@@ -15,8 +15,10 @@
# limitations under the License.
#
-dubbo.registry.group=dubbo
+dubbo.config-center.username=username
+dubbo.config-center.password=password
dubbo.config-center=zookeeper://127.0.0.1:2181
+dubbo.registry.group=dubbo
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.apollo.token=e16e5cd903fd0c97a116c873b448544b9d086de9
dubbo.apollo.appId=test