diff --git a/src/main/java/neatlogic/framework/form/attribute/core/IFormAttributeDataConversionHandler.java b/src/main/java/neatlogic/framework/form/attribute/core/IFormAttributeDataConversionHandler.java index ac2f07b55f9c9f81fa02eb3ee010e8fce645900e..8905363d5acf9b7186243f639fb1ac27bf204717 100644 --- a/src/main/java/neatlogic/framework/form/attribute/core/IFormAttributeDataConversionHandler.java +++ b/src/main/java/neatlogic/framework/form/attribute/core/IFormAttributeDataConversionHandler.java @@ -118,9 +118,10 @@ public interface IFormAttributeDataConversionHandler { * 密码加密 * @param source 属性原始数据 * @param configObj 属性配置信息 + * @param oldSource 旧数据 * @return 返回加密后的数据 */ - default Object passwordEncryption(Object source, JSONObject configObj) { + default Object passwordEncryption(Object source, JSONObject configObj, Object oldSource) { return source; } @@ -145,4 +146,11 @@ public interface IFormAttributeDataConversionHandler { return null; } + /** + * 掩藏密码 + * @return + */ + default Object passwordMask(Object source, JSONObject configObj) { + return source; + } } diff --git a/src/main/java/neatlogic/module/framework/form/attribute/handler/PasswordHandler.java b/src/main/java/neatlogic/module/framework/form/attribute/handler/PasswordHandler.java index 80c4b2f07df27098ca5d837d0c60c36156747476..7bd32d99677153dc27d3e5353bb1fdedf798694d 100644 --- a/src/main/java/neatlogic/module/framework/form/attribute/handler/PasswordHandler.java +++ b/src/main/java/neatlogic/module/framework/form/attribute/handler/PasswordHandler.java @@ -26,9 +26,13 @@ import neatlogic.framework.form.exception.AttributeValidException; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; +import java.util.Objects; + @Component public class PasswordHandler extends FormHandlerBase { + public final static String PASSWORD_MASK_SYMBOL = "******"; + @Override public String getHandler() { return FormHandler.FORMPASSWORD.getHandler(); @@ -153,11 +157,16 @@ public class PasswordHandler extends FormHandlerBase { } @Override - public Object passwordEncryption(Object source, JSONObject configObj) { + public Object passwordEncryption(Object source, JSONObject configObj, Object oldSource) { if (source == null) { return null; } if (source instanceof String) { + if (Objects.equals(source, PASSWORD_MASK_SYMBOL)) { + if (oldSource != null) { + return oldSource; + } + } return RC4Util.encrypt((String) source); } return source; @@ -186,4 +195,12 @@ public class PasswordHandler extends FormHandlerBase { } return resultObj; } + + @Override + public Object passwordMask(Object source, JSONObject configObj) { + if (source == null) { + return null; + } + return PASSWORD_MASK_SYMBOL; + } } diff --git a/src/main/java/neatlogic/module/framework/form/attribute/handler/SubassemblyHandler.java b/src/main/java/neatlogic/module/framework/form/attribute/handler/SubassemblyHandler.java index e6e2de24a847a5dc5850100268e1907cfb975370..0073854d48ee960ec7ef1fb55e9d400654f04dee 100644 --- a/src/main/java/neatlogic/module/framework/form/attribute/handler/SubassemblyHandler.java +++ b/src/main/java/neatlogic/module/framework/form/attribute/handler/SubassemblyHandler.java @@ -104,7 +104,7 @@ public class SubassemblyHandler extends FormHandlerBase { } @Override - public Object passwordEncryption(Object source, JSONObject configObj) { + public Object passwordEncryption(Object source, JSONObject configObj, Object oldSource) { JSONArray dataArray = null; if (source instanceof JSONArray) { dataArray = (JSONArray) source; @@ -112,6 +112,10 @@ public class SubassemblyHandler extends FormHandlerBase { if (CollectionUtils.isEmpty(dataArray)) { return source; } + JSONArray oldDataArray = null; + if (oldSource instanceof JSONArray) { + oldDataArray = (JSONArray) oldSource; + } JSONObject formData = configObj.getJSONObject("formData"); if (MapUtils.isNotEmpty(formData)) { JSONObject formConfig = formData.getJSONObject("formConfig"); @@ -139,7 +143,14 @@ public class SubassemblyHandler extends FormHandlerBase { if (MapUtils.isNotEmpty(dataObj)) { Object data = dataObj.get(uuid); if (data != null) { - dataObj.put(uuid, formAttributeDataConversionHandler.passwordEncryption(data, config)); + Object oldData = null; + if (CollectionUtils.size(oldDataArray) > j) { + JSONObject oldDataObj = oldDataArray.getJSONObject(j); + if (MapUtils.isNotEmpty(oldDataObj)) { + oldData = oldDataObj.get(uuid); + } + } + dataObj.put(uuid, formAttributeDataConversionHandler.passwordEncryption(data, config, oldData)); } } } @@ -231,4 +242,54 @@ public class SubassemblyHandler extends FormHandlerBase { public JSONObject passwordDecryption(Object source, String attributeUuid, JSONObject otherParamConfig) { return withinPasswordDecryption(source, attributeUuid, otherParamConfig); } + + @Override + public Object passwordMask(Object source, JSONObject configObj) { + JSONArray dataArray = null; + if (source instanceof JSONArray) { + dataArray = (JSONArray) source; + } + if (CollectionUtils.isEmpty(dataArray)) { + return source; + } + JSONObject formData = configObj.getJSONObject("formData"); + if (MapUtils.isNotEmpty(formData)) { + JSONObject formConfig = formData.getJSONObject("formConfig"); + if (MapUtils.isNotEmpty(formConfig)) { + JSONArray tableList = formConfig.getJSONArray("tableList"); + if (CollectionUtils.isNotEmpty(tableList)) { + for (int i = 0; i < tableList.size(); i++) { + JSONObject tableObj = tableList.getJSONObject(i); + if (MapUtils.isNotEmpty(tableObj)) { + JSONObject component = tableObj.getJSONObject("component"); + if (MapUtils.isNotEmpty(component)) { + String handler = component.getString("handler"); + if (Objects.equals(handler, FormHandler.FORMPASSWORD.getHandler()) + || Objects.equals(handler, FormHandler.FORMTABLEINPUTER.getHandler()) + || Objects.equals(handler, FormHandler.FORMSUBASSEMBLY.getHandler())) { + String uuid = component.getString("uuid"); + JSONObject config = component.getJSONObject("config"); + IFormAttributeDataConversionHandler formAttributeDataConversionHandler = FormAttributeDataConversionHandlerFactory.getHandler(handler); + if (Objects.equals(handler, FormHandler.FORMSUBASSEMBLY.getHandler())) { + JSONObject formData1 = component.getJSONObject("formData"); + config.put("formData", formData1); + } + for (int j = 0; j < dataArray.size(); j++) { + JSONObject dataObj = dataArray.getJSONObject(j); + if (MapUtils.isNotEmpty(dataObj)) { + Object data = dataObj.get(uuid); + if (data != null) { + dataObj.put(uuid, formAttributeDataConversionHandler.passwordMask(data, config)); + } + } + } + } + } + } + } + } + } + } + return dataArray; + } } diff --git a/src/main/java/neatlogic/module/framework/form/attribute/handler/TableInputerHandler.java b/src/main/java/neatlogic/module/framework/form/attribute/handler/TableInputerHandler.java index 6043a12c1806fe9d2ece59dde7ae31d081691327..ab7261eb8ca9486566cf0cb764982a4bbd2a4fde 100644 --- a/src/main/java/neatlogic/module/framework/form/attribute/handler/TableInputerHandler.java +++ b/src/main/java/neatlogic/module/framework/form/attribute/handler/TableInputerHandler.java @@ -854,7 +854,7 @@ public class TableInputerHandler extends FormHandlerBase { } @Override - public Object passwordEncryption(Object source, JSONObject configObj) { + public Object passwordEncryption(Object source, JSONObject configObj, Object oldSource) { JSONArray dataArray = null; if (source instanceof JSONArray) { dataArray = (JSONArray) source; @@ -862,6 +862,10 @@ public class TableInputerHandler extends FormHandlerBase { if (CollectionUtils.isEmpty(dataArray)) { return source; } + JSONArray oldDataArray = null; + if (oldSource instanceof JSONArray) { + oldDataArray = (JSONArray) oldSource; + } JSONArray dataConfig = configObj.getJSONArray("dataConfig"); if (CollectionUtils.isNotEmpty(dataConfig)) { for (int i = 0; i < dataConfig.size(); i++) { @@ -874,7 +878,22 @@ public class TableInputerHandler extends FormHandlerBase { if (MapUtils.isNotEmpty(dataObj)) { String data = dataObj.getString(uuid); if (StringUtils.isNotBlank(data)) { - dataObj.put(uuid, RC4Util.encrypt(data)); + boolean flag = false; + if (Objects.equals(data, PasswordHandler.PASSWORD_MASK_SYMBOL)) { + if (CollectionUtils.size(oldDataArray) > j) { + JSONObject oldDataObj = oldDataArray.getJSONObject(j); + if (MapUtils.isNotEmpty(oldDataObj)) { + String oldData = oldDataObj.getString(uuid); + if (StringUtils.isNotBlank(oldData)) { + flag = true; + dataObj.put(uuid, oldData); + } + } + } + } + if (!flag) { + dataObj.put(uuid, RC4Util.encrypt(data)); + } } } } @@ -889,7 +908,14 @@ public class TableInputerHandler extends FormHandlerBase { if (MapUtils.isNotEmpty(dataObj)) { JSONArray data = dataObj.getJSONArray(uuid); if (CollectionUtils.isNotEmpty(data)) { - this.passwordEncryption(data, config); + JSONArray oldData = null; + if (CollectionUtils.size(oldDataArray) > j) { + JSONObject oldDataObj = oldDataArray.getJSONObject(j); + if (MapUtils.isNotEmpty(oldDataObj)) { + oldData = oldDataObj.getJSONArray(uuid); + } + } + this.passwordEncryption(data, config, oldData); } } } @@ -958,4 +984,50 @@ public class TableInputerHandler extends FormHandlerBase { public JSONObject passwordDecryption(Object source, String attributeUuid, JSONObject otherParamConfig) { return withinPasswordDecryption(source, attributeUuid, otherParamConfig); } + + @Override + public Object passwordMask(Object source, JSONObject configObj) { + JSONArray dataArray = null; + if (source instanceof JSONArray) { + dataArray = (JSONArray) source; + } + if (CollectionUtils.isEmpty(dataArray)) { + return source; + } + JSONArray dataConfig = configObj.getJSONArray("dataConfig"); + if (CollectionUtils.isNotEmpty(dataConfig)) { + for (int i = 0; i < dataConfig.size(); i++) { + JSONObject attr = dataConfig.getJSONObject(i); + String handler = attr.getString("handler"); + if (Objects.equals(handler, FormHandler.FORMPASSWORD.getHandler())) { + String uuid = attr.getString("uuid"); + for (int j = 0; j < dataArray.size(); j++) { + JSONObject dataObj = dataArray.getJSONObject(j); + if (MapUtils.isNotEmpty(dataObj)) { + String data = dataObj.getString(uuid); + if (StringUtils.isNotBlank(data)) { + dataObj.put(uuid, PasswordHandler.PASSWORD_MASK_SYMBOL); + } + } + } + } else if (Objects.equals(handler, "formtable")) { + JSONObject config = attr.getJSONObject("config"); + if (MapUtils.isEmpty(config)) { + continue; + } + String uuid = attr.getString("uuid"); + for (int j = 0; j < dataArray.size(); j++) { + JSONObject dataObj = dataArray.getJSONObject(j); + if (MapUtils.isNotEmpty(dataObj)) { + JSONArray data = dataObj.getJSONArray(uuid); + if (CollectionUtils.isNotEmpty(data)) { + this.passwordMask(data, config); + } + } + } + } + } + } + return dataArray; + } }