parent
95bd350cae
commit
882a8c430f
|
|
@ -20,6 +20,7 @@ import org.apache.dubbo.common.URL;
|
|||
import org.apache.dubbo.common.constants.RemotingConstants;
|
||||
import org.apache.dubbo.common.logger.Logger;
|
||||
import org.apache.dubbo.common.logger.LoggerFactory;
|
||||
import org.apache.dubbo.common.utils.StringUtils;
|
||||
import org.apache.dubbo.remoting.zookeeper.ZookeeperClient;
|
||||
import org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter;
|
||||
|
||||
|
|
@ -52,6 +53,7 @@ public abstract class AbstractZookeeperTransporter implements ZookeeperTransport
|
|||
@Override
|
||||
public ZookeeperClient connect(URL url) {
|
||||
ZookeeperClient zookeeperClient;
|
||||
// address format: {[username:password@]address}
|
||||
List<String> addressList = getURLBackupAddress(url);
|
||||
// The field define the zookeeper server , including protocol, host, port, username, password
|
||||
if ((zookeeperClient = fetchAndUpdateZookeeperClientCache(addressList)) != null && zookeeperClient.isConnected()) {
|
||||
|
|
@ -111,8 +113,29 @@ public abstract class AbstractZookeeperTransporter implements ZookeeperTransport
|
|||
List<String> getURLBackupAddress(URL url) {
|
||||
List<String> addressList = new ArrayList<String>();
|
||||
addressList.add(url.getAddress());
|
||||
|
||||
addressList.addAll(url.getParameter(RemotingConstants.BACKUP_KEY, Collections.EMPTY_LIST));
|
||||
|
||||
String authPrefix = null;
|
||||
if (StringUtils.isNotEmpty(url.getUsername())) {
|
||||
StringBuilder buf = new StringBuilder();
|
||||
buf.append(url.getUsername());
|
||||
if (StringUtils.isNotEmpty(url.getPassword())) {
|
||||
buf.append(":");
|
||||
buf.append(url.getPassword());
|
||||
}
|
||||
buf.append("@");
|
||||
authPrefix = buf.toString();
|
||||
}
|
||||
|
||||
if (StringUtils.isNotEmpty(authPrefix)) {
|
||||
List<String> authedAddressList = new ArrayList<>(addressList.size());
|
||||
for (String addr : addressList) {
|
||||
authedAddressList.add(authPrefix + addr);
|
||||
}
|
||||
return authedAddressList;
|
||||
}
|
||||
|
||||
|
||||
return addressList;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -205,4 +205,21 @@ public class AbstractZookeeperTransporterTest {
|
|||
zkServer2.stop();
|
||||
zkServer3.stop();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSameHostWithDifferentUser() throws Exception {
|
||||
int zkPort1 = NetUtils.getAvailablePort();
|
||||
int zkPort2 = NetUtils.getAvailablePort();
|
||||
try (TestingServer zkServer1 = new TestingServer(zkPort1, true)) {
|
||||
try (TestingServer zkServer2 = new TestingServer(zkPort2, true)) {
|
||||
URL url1 = URL.valueOf("zookeeper://us1:pw1@127.0.0.1:" + zkPort1 + "/path1");
|
||||
URL url2 = URL.valueOf("zookeeper://us2:pw2@127.0.0.1:" + zkPort1 + "/path2");
|
||||
|
||||
ZookeeperClient client1 = abstractZookeeperTransporter.connect(url1);
|
||||
ZookeeperClient client2 = abstractZookeeperTransporter.connect(url2);
|
||||
|
||||
assertThat(client1, not(client2));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue