diff --git a/.gitignore b/.gitignore
index 6aa4d54cb..ae9ec88aa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,4 @@ test/logs
derby.log
yarn.lock
.flattened-pom.xml
+lefthook.yml
diff --git a/api/src/main/java/com/alibaba/nacos/api/PropertyKeyConst.java b/api/src/main/java/com/alibaba/nacos/api/PropertyKeyConst.java
index e6a1917a2..fe27f27ca 100644
--- a/api/src/main/java/com/alibaba/nacos/api/PropertyKeyConst.java
+++ b/api/src/main/java/com/alibaba/nacos/api/PropertyKeyConst.java
@@ -95,6 +95,11 @@ public class PropertyKeyConst {
public static final String LOG_ALL_PROPERTIES = "logAllProperties";
+ /**
+ * Since 2.3.3, For some situation like java agent using nacos-client which can't use env ram info.
+ */
+ public static final String IS_USE_RAM_INFO_PARSING = "isUseRamInfoParsing";
+
/**
* Get the key value of some variable value from the system property.
*/
diff --git a/api/src/main/java/com/alibaba/nacos/api/SystemPropertyKeyConst.java b/api/src/main/java/com/alibaba/nacos/api/SystemPropertyKeyConst.java
index 3eac8aaa1..f24138daf 100644
--- a/api/src/main/java/com/alibaba/nacos/api/SystemPropertyKeyConst.java
+++ b/api/src/main/java/com/alibaba/nacos/api/SystemPropertyKeyConst.java
@@ -46,4 +46,9 @@ public interface SystemPropertyKeyConst {
* It is also supported by the -D parameter.
*/
String IS_USE_ENDPOINT_PARSING_RULE = "nacos.use.endpoint.parsing.rule";
+
+ /**
+ * Since 2.3.3, For some situation like java agent using nacos-client which can't use env ram info.
+ */
+ String IS_USE_RAM_INFO_PARSING = "nacos.use.ram.info.parsing";
}
diff --git a/api/src/main/java/com/alibaba/nacos/api/common/Constants.java b/api/src/main/java/com/alibaba/nacos/api/common/Constants.java
index 9e9820a55..0bb32558b 100644
--- a/api/src/main/java/com/alibaba/nacos/api/common/Constants.java
+++ b/api/src/main/java/com/alibaba/nacos/api/common/Constants.java
@@ -247,6 +247,11 @@ public class Constants {
public static final String CONFIG_GRAY_LABEL = "nacos.config.gray.label";
+ /**
+ * Since 2.3.3, For some situation like java agent using nacos-client which can't use env ram info.
+ */
+ public static final String DEFAULT_USE_RAM_INFO_PARSING = "true";
+
/**
* The constants in config directory.
*/
diff --git a/client/src/main/java/com/alibaba/nacos/client/auth/ram/RamClientAuthServiceImpl.java b/client/src/main/java/com/alibaba/nacos/client/auth/ram/RamClientAuthServiceImpl.java
index 73ffc18b1..e66565d08 100644
--- a/client/src/main/java/com/alibaba/nacos/client/auth/ram/RamClientAuthServiceImpl.java
+++ b/client/src/main/java/com/alibaba/nacos/client/auth/ram/RamClientAuthServiceImpl.java
@@ -22,6 +22,7 @@ import com.alibaba.nacos.client.auth.ram.identify.StsConfig;
import com.alibaba.nacos.client.auth.ram.injector.AbstractResourceInjector;
import com.alibaba.nacos.client.auth.ram.injector.ConfigResourceInjector;
import com.alibaba.nacos.client.auth.ram.injector.NamingResourceInjector;
+import com.alibaba.nacos.client.auth.ram.utils.RamUtil;
import com.alibaba.nacos.client.auth.ram.utils.SpasAdapter;
import com.alibaba.nacos.common.utils.StringUtils;
import com.alibaba.nacos.plugin.auth.api.LoginIdentityContext;
@@ -76,13 +77,11 @@ public class RamClientAuthServiceImpl extends AbstractClientAuthService {
}
private void loadAccessKey(Properties properties) {
- String accessKey = properties.getProperty(PropertyKeyConst.ACCESS_KEY);
- ramContext.setAccessKey(StringUtils.isBlank(accessKey) ? SpasAdapter.getAk() : accessKey);
+ ramContext.setAccessKey(RamUtil.getAccessKey(properties));
}
private void loadSecretKey(Properties properties) {
- String secretKey = properties.getProperty(PropertyKeyConst.SECRET_KEY);
- ramContext.setSecretKey(StringUtils.isBlank(secretKey) ? SpasAdapter.getSk() : secretKey);
+ ramContext.setSecretKey(RamUtil.getSecretKey(properties));
}
private void loadRegionId(Properties properties) {
diff --git a/client/src/main/java/com/alibaba/nacos/client/auth/ram/utils/RamUtil.java b/client/src/main/java/com/alibaba/nacos/client/auth/ram/utils/RamUtil.java
new file mode 100644
index 000000000..ee3db5018
--- /dev/null
+++ b/client/src/main/java/com/alibaba/nacos/client/auth/ram/utils/RamUtil.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 1999-2023 Alibaba Group Holding Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.alibaba.nacos.client.auth.ram.utils;
+
+import com.alibaba.nacos.api.PropertyKeyConst;
+import com.alibaba.nacos.api.SystemPropertyKeyConst;
+import com.alibaba.nacos.api.common.Constants;
+import com.alibaba.nacos.common.utils.StringUtils;
+
+import java.util.Properties;
+
+/**
+ * Util to get ram info, such as AK, SK and RAM role.
+ *
+ * @author xiweng.yy
+ */
+public class RamUtil {
+
+ public static String getAccessKey(Properties properties) {
+ boolean isUseRamInfoParsing = Boolean.parseBoolean(properties
+ .getProperty(PropertyKeyConst.IS_USE_RAM_INFO_PARSING,
+ System.getProperty(SystemPropertyKeyConst.IS_USE_RAM_INFO_PARSING,
+ Constants.DEFAULT_USE_RAM_INFO_PARSING)));
+
+ String result = properties.getProperty(PropertyKeyConst.ACCESS_KEY);
+ if (isUseRamInfoParsing && StringUtils.isBlank(result)) {
+ result = SpasAdapter.getAk();
+ }
+ return result;
+ }
+
+ public static String getSecretKey(Properties properties) {
+ boolean isUseRamInfoParsing = Boolean.parseBoolean(properties
+ .getProperty(PropertyKeyConst.IS_USE_RAM_INFO_PARSING,
+ System.getProperty(SystemPropertyKeyConst.IS_USE_RAM_INFO_PARSING,
+ Constants.DEFAULT_USE_RAM_INFO_PARSING)));
+
+ String result = properties.getProperty(PropertyKeyConst.SECRET_KEY);
+ if (isUseRamInfoParsing && StringUtils.isBlank(result)) {
+ result = SpasAdapter.getSk();
+ }
+ return result;
+ }
+}
diff --git a/client/src/test/java/com/alibaba/nacos/client/auth/ram/utils/RamUtilTest.java b/client/src/test/java/com/alibaba/nacos/client/auth/ram/utils/RamUtilTest.java
new file mode 100644
index 000000000..1e767042b
--- /dev/null
+++ b/client/src/test/java/com/alibaba/nacos/client/auth/ram/utils/RamUtilTest.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 1999-2023 Alibaba Group Holding Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.alibaba.nacos.client.auth.ram.utils;
+
+import com.alibaba.nacos.api.PropertyKeyConst;
+import com.alibaba.nacos.client.auth.ram.identify.CredentialService;
+import com.alibaba.nacos.client.auth.ram.identify.Credentials;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.Properties;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+public class RamUtilTest {
+
+ private Properties properties;
+
+ @BeforeEach
+ public void setUp() throws Exception {
+ SpasAdapter.freeCredentialInstance();
+ Credentials credentials = new Credentials("spasAk", "spasSk", "spasNamespaceId");
+ CredentialService.getInstance().setStaticCredential(credentials);
+ properties = new Properties();
+ properties.setProperty(PropertyKeyConst.ACCESS_KEY, "userAk");
+ properties.setProperty(PropertyKeyConst.SECRET_KEY, "userSk");
+ }
+
+ @AfterEach
+ public void tearDown() throws Exception {
+ SpasAdapter.freeCredentialInstance();
+ }
+
+ @Test
+ public void testGetAccessKeyWithUserAkSk() {
+ assertEquals("userAk", RamUtil.getAccessKey(properties));
+ assertEquals("userSk", RamUtil.getSecretKey(properties));
+ }
+
+ @Test
+ public void testGetAccessKeyWithSpasAkSk() {
+ assertEquals("spasAk", RamUtil.getAccessKey(new Properties()));
+ assertEquals("spasSk", RamUtil.getSecretKey(new Properties()));
+ }
+
+ @Test
+ public void testGetAccessKeyWithoutSpasAkSk() {
+ Properties properties1 = new Properties();
+ properties1.setProperty(PropertyKeyConst.IS_USE_RAM_INFO_PARSING, "false");
+ assertNull(RamUtil.getAccessKey(properties1));
+ assertNull(RamUtil.getSecretKey(properties1));
+ }
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 947e4eafc..98e9cdae2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -361,6 +361,7 @@
**/filter-config.json
**/disk_cache_test/**
**/failover_test/**
+ lefthook.yml