diff --git a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CreateConfigSample.java b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CreateConfigSample.java index 3a8923b4bd4c74da15145005bdc92b2964d8a09c..578bdd62c76dff2b29c3e099a6d0034bc324d7bb 100644 --- a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CreateConfigSample.java +++ b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CreateConfigSample.java @@ -31,6 +31,7 @@ import com.x.base.core.project.config.HuaweiPushConfig; import com.x.base.core.project.config.JpushConfig; import com.x.base.core.project.config.MPweixin; import com.x.base.core.project.config.Messages; +import com.x.base.core.project.config.Miscellaneous; import com.x.base.core.project.config.Node; import com.x.base.core.project.config.Person; import com.x.base.core.project.config.Portal; @@ -88,6 +89,7 @@ public class CreateConfigSample { classes.add(WeLink.class); classes.add(WorkTime.class); classes.add(ZhengwuDingding.class); + classes.add(Miscellaneous.class); Collections.sort(classes, (c1, c2) -> c1.getCanonicalName().compareTo(c2.getCanonicalName())); for (Class cls : classes) { diff --git a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/DumpRestoreData.java b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/DumpRestoreData.java index 7252bcce119989c0f064ff972431856d40edc252..bec8e3889c132df3112af5240705b6e91230bc44 100644 --- a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/DumpRestoreData.java +++ b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/DumpRestoreData.java @@ -22,7 +22,6 @@ public class DumpRestoreData extends ConfigObject { public static final String RESTOREOVERRIDE_CLEAN = "clean"; public static final String RESTOREOVERRIDE_SKIPEXISTED = "skipExisted"; - public static final Boolean DEFAULT_PARALLEL = true; public static final Boolean DEFAULT_REDISTRIBUTE = true; public static final Boolean DEFAULT_EXCEPTIONINVALIDSTORAGE = true; public static final Boolean DEFAULT_ATTACHSTORAGE = true; @@ -32,7 +31,6 @@ public class DumpRestoreData extends ConfigObject { this.includes = new ArrayList<>(); this.excludes = new ArrayList<>(); this.mode = MODE_LITE; - this.parallel = DEFAULT_PARALLEL; this.attachStorage = DEFAULT_ATTACHSTORAGE; this.exceptionInvalidStorage = DEFAULT_EXCEPTIONINVALIDSTORAGE; this.itemCategory = DEFAULT_ITEMCATEGORY; @@ -47,9 +45,6 @@ public class DumpRestoreData extends ConfigObject { @FieldDescribe("导出数据模式,lite|full,默认使用lite") private String mode; - @FieldDescribe("使用并行导出,默认true") - private Boolean parallel; - @FieldDescribe("无法获取storage是否升起错误.") private Boolean exceptionInvalidStorage; @@ -89,10 +84,6 @@ public class DumpRestoreData extends ConfigObject { return BooleanUtils.isNotFalse(exceptionInvalidStorage); } - public Boolean getParallel() { - return BooleanUtils.isNotFalse(parallel); - } - public String getMode() { return StringUtils.equals(MODE_FULL, mode) ? MODE_FULL : MODE_LITE; } @@ -121,10 +112,6 @@ public class DumpRestoreData extends ConfigObject { this.excludes = excludes; } - public void setParallel(Boolean parallel) { - this.parallel = parallel; - } - public void setExceptionInvalidStorage(Boolean exceptionInvalidStorage) { this.exceptionInvalidStorage = exceptionInvalidStorage; } diff --git a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/TernaryManagement.java b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/TernaryManagement.java index afd809853bfc1bef5bf836a1d693861d500b150a..8c4633f22e6fa0c4af110c94495fd03efebcbe1f 100644 --- a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/TernaryManagement.java +++ b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/TernaryManagement.java @@ -1,9 +1,17 @@ package com.x.base.core.project.config; import java.io.File; +import java.io.UnsupportedEncodingException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.spec.InvalidKeySpecException; import java.util.ArrayList; import java.util.List; +import javax.crypto.BadPaddingException; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; + import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; @@ -326,8 +334,8 @@ public class TernaryManagement extends ConfigObject { return this._systemManagerPassword; } - public void setSystemManagerPassword(String systemManagerPassword) { - this.systemManagerPassword = systemManagerPassword; + public void setSystemManagerPassword(String systemManagerPassword) throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException { + this.systemManagerPassword = Crypto.formattedDefaultEncrypt(systemManagerPassword); } public String getSecurityManagerPassword() { @@ -339,8 +347,8 @@ public class TernaryManagement extends ConfigObject { return this._securityManagerPassword; } - public void setSecurityManagerPassword(String securityManagerPassword) { - this.securityManagerPassword = securityManagerPassword; + public void setSecurityManagerPassword(String securityManagerPassword) throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException { + this.securityManagerPassword = Crypto.formattedDefaultEncrypt(securityManagerPassword); } public String getAuditManagerPassword() { @@ -351,7 +359,7 @@ public class TernaryManagement extends ConfigObject { return this._auditManagerPassword; } - public void setAuditManagerPassword(String auditManagerPassword) { - this.auditManagerPassword = auditManagerPassword; + public void setAuditManagerPassword(String auditManagerPassword) throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException { + this.auditManagerPassword = Crypto.formattedDefaultEncrypt(auditManagerPassword); } } diff --git a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Token.java b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Token.java index 2d9b672ad6eb49f74c8ccb4f511fa9db2a0d39d9..1626e7722d2e0c7e3016dc05d2dee5deaad6970d 100644 --- a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Token.java +++ b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Token.java @@ -1,12 +1,20 @@ package com.x.base.core.project.config; import java.io.File; +import java.io.UnsupportedEncodingException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.spec.InvalidKeySpecException; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import javax.crypto.BadPaddingException; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; + import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.BooleanUtils; @@ -115,11 +123,13 @@ public class Token extends ConfigObject { return this._password; } - public void setPassword(String password) { + public void setPassword(String password) + throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, + IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException { if (StringUtils.equals(password, initPassword)) { this.password = null; } else { - this.password = password; + this.password = Crypto.formattedDefaultEncrypt(password); } } diff --git a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/Crypto.java b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/Crypto.java index ea5d8a0f844de99ddf0f998c1c101e8f03791f60..55667d89149ab6aaf2a8da617688f6e353b01ee6 100644 --- a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/Crypto.java +++ b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/Crypto.java @@ -17,6 +17,7 @@ import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; @@ -54,6 +55,11 @@ public class Crypto { private static final String TYPE_SM4 = "sm4"; + private static final Pattern PLAINTEXT_TRANSFORM_REGEX = Pattern.compile("^\\((ENCRYPT:|SCRIPT:)(.+?)\\)$"); + + private static final String ENCRYPT_PREFIX = "ENCRYPT:"; + private static final String SCRIPT_PREFIX = "SCRIPT:"; + public static String encrypt(String data, String key) throws Exception { return encrypt(data, key, Config.person().getEncryptType()); } @@ -193,24 +199,24 @@ public class Crypto { if (StringUtils.isEmpty(text)) { return text; } - try { - Matcher matcher = StringTools.SCRIPTTEXT_REGEX.matcher(text); - if (matcher.matches()) { - String value = StringEscapeUtils.unescapeJson(matcher.group(1)); - if (StringUtils.startsWithIgnoreCase(value, "ENCRYPT:")) { - String de = StringUtils.substringAfter(value, ":"); - return decrypt(de, NEVERCHANGEKEY, null); - } else { - CompiledScript cs = ScriptingFactory.functionalizationCompile(text); + Matcher matcher = PLAINTEXT_TRANSFORM_REGEX.matcher(text); + if (matcher.matches()) { + try { + if (StringUtils.startsWithIgnoreCase(matcher.group(1), ENCRYPT_PREFIX)) { + return decrypt(matcher.group(2), NEVERCHANGEKEY, null); + } else if (StringUtils.startsWithIgnoreCase(matcher.group(1), SCRIPT_PREFIX)) { + CompiledScript cs = ScriptingFactory + .functionalizationCompile(StringEscapeUtils.unescapeJson(matcher.group(2))); ScriptContext scriptContext = new SimpleScriptContext(); return JsonScriptingExecutor.evalString(cs, scriptContext); } - } else { - return text; + } catch (Exception e) { + e.printStackTrace(); } - } catch (Exception e) { - e.printStackTrace(); + } else { + return text; } + return null; } @@ -221,4 +227,10 @@ public class Crypto { String str = Base64.encodeBase64URLSafeString(bt); return URLEncoder.encode(str, StandardCharsets.UTF_8.name()); } + + public static String formattedDefaultEncrypt(String data) + throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, + IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException { + return "(" + ENCRYPT_PREFIX + defaultEncrypt(data) + ")"; + } } diff --git a/o2server/x_console/src/main/java/com/x/server/console/action/DumpData.java b/o2server/x_console/src/main/java/com/x/server/console/action/DumpData.java index e76ee679f9d1f722dde5db6cb95b6989899b0b92..74eb3c275e3aa61f9671860ffe6f123c006e25c2 100644 --- a/o2server/x_console/src/main/java/com/x/server/console/action/DumpData.java +++ b/o2server/x_console/src/main/java/com/x/server/console/action/DumpData.java @@ -96,11 +96,8 @@ public class DumpData { DateTools.compact(start) + "_dump.xml"); PersistenceXmlHelper.write(xml.toString(), classNames, true, classLoader); StorageMappings storageMappings = Config.storageMappings(); - Stream stream = BooleanUtils.isTrue(Config.dumpRestoreData().getParallel()) - ? classNames.parallelStream() - : classNames.stream(); AtomicInteger idx = new AtomicInteger(1); - stream.forEach(className -> { + classNames.stream().forEach(className -> { Thread.currentThread().setContextClassLoader(classLoader); String nameOfThread = Thread.currentThread().getName(); Thread.currentThread().setName(DumpData.class.getName() + ":" + className); diff --git a/o2server/x_console/src/main/java/com/x/server/console/action/RestoreData.java b/o2server/x_console/src/main/java/com/x/server/console/action/RestoreData.java index 423cf5619349f9e3f7e8f58e2f45a14ca04bd666..4511613b1c4596b7bb0d307e9281ca42ec74dba4 100644 --- a/o2server/x_console/src/main/java/com/x/server/console/action/RestoreData.java +++ b/o2server/x_console/src/main/java/com/x/server/console/action/RestoreData.java @@ -111,12 +111,9 @@ public class RestoreData { Path xml = Paths.get(Config.dir_local_temp_classes().getAbsolutePath(), DateTools.compact(start) + "_restore.xml"); PersistenceXmlHelper.write(xml.toString(), classNames, true, classLoader); - Stream stream = BooleanUtils.isTrue(Config.dumpRestoreData().getParallel()) - ? classNames.parallelStream() - : classNames.stream(); AtomicInteger idx = new AtomicInteger(1); AtomicLong total = new AtomicLong(0); - stream.forEach(className -> { + classNames.stream().forEach(className -> { Thread.currentThread().setContextClassLoader(classLoader); try { @SuppressWarnings("unchecked")