Browse Source

decrypt property

deason 4 years ago
parent
commit
bebccbc411

+ 6 - 2
config-center-client/src/main/java/cn/com/qmth/framework/config/center/client/core/ConfigConstants.java

@@ -11,12 +11,16 @@ public interface ConfigConstants {
 
     String CONFIG_CENTER_ENABLED = "sys.config.center.enabled";
 
-    String SYS_CONFIG_CENTER_ADDRESS = "sys.config.center.address";
+    String CONFIG_CENTER_ADDRESS = "sys.config.center.address";
 
-    String SYS_CONFIG_CENTER_NAMESPACE = "sys.config.center.namespace";
+    String CONFIG_CENTER_NAMESPACE = "sys.config.center.namespace";
 
     String CONFIG_CENTER_APP_CODE = "sys.config.center.appCode";
 
+    String CONFIG_CENTER_SECRET_KEY = "sys.config.center.secretKey";
+
+    String SECRET_PROPERTY_PREFIX = "$secret.";
+
     String CUSTOM_PROPERTY_SOURCE = "configCenterProperties";
 
     String DEFAULT_PROPERTIES = "application.properties";

+ 4 - 3
config-center-client/src/main/java/cn/com/qmth/framework/config/center/client/core/ConfigRefreshEndPoint.java

@@ -30,10 +30,11 @@ public class ConfigRefreshEndPoint {
     public String configRefreshEndPoint() {
         try {
             Map<String, Object> remoteProperties = RemotePropertyLoader.call(
-                    environment.getProperty(ConfigConstants.SYS_CONFIG_CENTER_ADDRESS),
-                    environment.getProperty(ConfigConstants.SYS_CONFIG_CENTER_NAMESPACE),
+                    environment.getProperty(ConfigConstants.CONFIG_CENTER_ADDRESS),
+                    environment.getProperty(ConfigConstants.CONFIG_CENTER_NAMESPACE),
                     environment.getProperty(ConfigConstants.CONFIG_CENTER_APP_CODE),
-                    environment.getProperty(ConfigConstants.SPRING_PROFILES_ACTIVE)
+                    environment.getProperty(ConfigConstants.SPRING_PROFILES_ACTIVE),
+                    environment.getProperty(ConfigConstants.CONFIG_CENTER_SECRET_KEY)
             );
 
             CustomMapPropertySource customMapPropertySource = new CustomMapPropertySource(ConfigConstants.CUSTOM_PROPERTY_SOURCE, remoteProperties);

+ 4 - 3
config-center-client/src/main/java/cn/com/qmth/framework/config/center/client/core/CustomEnvironmentPostProcessor.java

@@ -31,10 +31,11 @@ public class CustomEnvironmentPostProcessor implements CustomConfigProcessor, En
 
         // 获取远程配置中心的配置项
         Map<String, Object> remoteProperties = RemotePropertyLoader.call(
-                environment.getProperty(ConfigConstants.SYS_CONFIG_CENTER_ADDRESS),
-                environment.getProperty(ConfigConstants.SYS_CONFIG_CENTER_NAMESPACE),
+                environment.getProperty(ConfigConstants.CONFIG_CENTER_ADDRESS),
+                environment.getProperty(ConfigConstants.CONFIG_CENTER_NAMESPACE),
                 environment.getProperty(ConfigConstants.CONFIG_CENTER_APP_CODE),
-                environment.getProperty(ConfigConstants.SPRING_PROFILES_ACTIVE)
+                environment.getProperty(ConfigConstants.SPRING_PROFILES_ACTIVE),
+                environment.getProperty(ConfigConstants.CONFIG_CENTER_SECRET_KEY)
         );
 
         CustomMapPropertySource customMapPropertySource = new CustomMapPropertySource(ConfigConstants.CUSTOM_PROPERTY_SOURCE, remoteProperties);

+ 2 - 2
config-center-client/src/main/java/cn/com/qmth/framework/config/center/client/core/CustomSpringApplicationRunListener.java

@@ -57,8 +57,8 @@ public class CustomSpringApplicationRunListener implements CustomConfigProcessor
         log.debug("notice {}...", message);
 
         RemotePropertyLoader.notice(
-                environment.getProperty(ConfigConstants.SYS_CONFIG_CENTER_ADDRESS),
-                environment.getProperty(ConfigConstants.SYS_CONFIG_CENTER_NAMESPACE),
+                environment.getProperty(ConfigConstants.CONFIG_CENTER_ADDRESS),
+                environment.getProperty(ConfigConstants.CONFIG_CENTER_NAMESPACE),
                 environment.getProperty(ConfigConstants.CONFIG_CENTER_APP_CODE),
                 environment.getProperty(ConfigConstants.SPRING_PROFILES_ACTIVE),
                 message

+ 24 - 4
config-center-client/src/main/java/cn/com/qmth/framework/config/center/client/core/RemotePropertyLoader.java

@@ -5,6 +5,7 @@
 
 package cn.com.qmth.framework.config.center.client.core;
 
+import cn.com.qmth.framework.config.center.client.utils.AESUtils;
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import okhttp3.*;
@@ -21,13 +22,13 @@ public class RemotePropertyLoader {
 
     private static final String CONTENT_TYPE = "application/json; charset=UTF-8";
 
-    public static Map<String, Object> call(String address, String namespace, String appCode, String profile) {
+    public static Map<String, Object> call(String address, String namespace, String appCode, String profile, String secretKey) {
         if (StringUtils.isEmpty(address)) {
-            throw new IllegalArgumentException(ConfigConstants.SYS_CONFIG_CENTER_ADDRESS + " is not exist");
+            throw new IllegalArgumentException(ConfigConstants.CONFIG_CENTER_ADDRESS + " is not exist");
         }
 
         if (StringUtils.isEmpty(namespace)) {
-            throw new IllegalArgumentException(ConfigConstants.SYS_CONFIG_CENTER_NAMESPACE + " is not exist");
+            throw new IllegalArgumentException(ConfigConstants.CONFIG_CENTER_NAMESPACE + " is not exist");
         }
 
         if (StringUtils.isEmpty(appCode)) {
@@ -52,7 +53,9 @@ public class RemotePropertyLoader {
             if (response.isSuccessful()) {
                 ObjectMapper jsonMapper = new ObjectMapper();
                 JavaType javaType = jsonMapper.getTypeFactory().constructMapType(HashMap.class, String.class, Object.class);
-                return jsonMapper.readValue(resp, javaType);
+                Map<String, Object> properties = jsonMapper.readValue(resp, javaType);
+
+                return decryptProperties(properties, secretKey);
             }
         } catch (Exception e) {
             throw new RuntimeException(configCenterUrl + " call err! " + e.getMessage(), e);
@@ -74,4 +77,21 @@ public class RemotePropertyLoader {
         }
     }
 
+    private static Map<String, Object> decryptProperties(Map<String, Object> properties, String secretKey) {
+        Map<String, Object> finalProperties = new HashMap<>();
+
+        for (Map.Entry<String, Object> entry : properties.entrySet()) {
+            if (entry.getKey().startsWith(ConfigConstants.SECRET_PROPERTY_PREFIX)) {
+                finalProperties.put(
+                        entry.getKey().substring(ConfigConstants.SECRET_PROPERTY_PREFIX.length()),
+                        AESUtils.decrypt(secretKey, String.valueOf(entry.getValue()))
+                );
+            } else {
+                finalProperties.put(entry.getKey(), entry.getValue());
+            }
+        }
+
+        return finalProperties;
+    }
+
 }

+ 3 - 3
config-center-client/src/main/java/cn/com/qmth/framework/config/center/client/utils/AESUtils.java

@@ -61,13 +61,13 @@ public class AESUtils {
             byte[] data = cipher.doFinal(Hex.decodeHex(str));
             return new String(data);
         } catch (Exception e) {
-            throw new RuntimeException(e);
+            throw new RuntimeException("Decrypt fail, maybe secretKey is wrong...", e);
         }
     }
 
     private static SecretKey initSecretKey(String key) {
-        if (key == null) {
-            throw new IllegalArgumentException("key must be not null");
+        if (StringUtils.isEmpty(key)) {
+            throw new IllegalArgumentException("secretKey must be not null");
         }
 
         byte[] keyBytes = key.getBytes();

+ 1 - 1
config-center-server/src/main/resources/examcloud/prod/application-demo.properties

@@ -1,5 +1,5 @@
 # ...
 sys.log.level=info
-test1=aaaaa
+$secret.test1=325c1a5dbb80e0bb77403aa08d38573b
 test2=bbbbb
 test3=