diff --git a/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java b/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java index 4de2848a3e..d6fc4ca263 100644 --- a/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java +++ b/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java @@ -19,7 +19,6 @@ import io.dataease.plugins.common.base.domain.Datasource; import io.dataease.service.datasource.DatasourceService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.web.bind.annotation.*; diff --git a/backend/src/main/java/io/dataease/dto/DatasourceDTO.java b/backend/src/main/java/io/dataease/dto/DatasourceDTO.java index 47d39bd4cf..8b3c8dcf30 100644 --- a/backend/src/main/java/io/dataease/dto/DatasourceDTO.java +++ b/backend/src/main/java/io/dataease/dto/DatasourceDTO.java @@ -19,6 +19,7 @@ public class DatasourceDTO extends Datasource { @ApiModelProperty("权限") private String privileges; private List apiConfiguration; + private String apiConfigurationStr; private String typeDesc; private DatasourceCalculationMode calculationMode; } diff --git a/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java b/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java index 71e32cb73f..31a1b0511f 100644 --- a/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java +++ b/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java @@ -1014,7 +1014,7 @@ public class ChartDataBuild { if (StringUtils.isEmpty(originStr) || originStr.length() <= columnPermissionItem.getDesensitizationRule().getM() + columnPermissionItem.getDesensitizationRule().getN() + 1) { desensitizationStr = String.join("", Collections.nCopies(columnPermissionItem.getDesensitizationRule().getM(), "X")) + "***" + String.join("", Collections.nCopies(columnPermissionItem.getDesensitizationRule().getN(), "X")); } else { - desensitizationStr = StringUtils.substring(originStr, 0, columnPermissionItem.getDesensitizationRule().getM() - 1) + "***" + StringUtils.substring(originStr, originStr.length() - columnPermissionItem.getDesensitizationRule().getN(), originStr.length() - 1); + desensitizationStr = StringUtils.substring(originStr, 0, columnPermissionItem.getDesensitizationRule().getM()) + "***" + StringUtils.substring(originStr, originStr.length() - columnPermissionItem.getDesensitizationRule().getN() - 1, originStr.length() - 1); } break; case RetainMToN: diff --git a/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java b/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java index c60c17f22a..585a5a085f 100644 --- a/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java +++ b/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java @@ -108,7 +108,7 @@ public class DatasourceService { if (!types().stream().map(DataSourceType::getType).collect(Collectors.toList()).contains(datasource.getType())) { throw new Exception("Datasource type not supported."); } - + datasource.setConfiguration(new String(java.util.Base64.getDecoder().decode(datasource.getConfiguration()))); Provider datasourceProvider = ProviderFactory.getProvider(datasource.getType()); datasourceProvider.checkConfiguration(datasource); @@ -212,6 +212,14 @@ public class DatasourceService { } } } + if(StringUtils.isNotEmpty(datasourceDTO.getConfiguration())){ + datasourceDTO.setConfiguration(new String(java.util.Base64.getEncoder().encode(datasourceDTO.getConfiguration().getBytes()))); + } + if(CollectionUtils.isNotEmpty(datasourceDTO.getApiConfiguration())){ + String config = new Gson().toJson(datasourceDTO.getApiConfiguration()); + datasourceDTO.setApiConfigurationStr(new String(java.util.Base64.getEncoder().encode(config.getBytes()))); + datasourceDTO.setApiConfiguration(null); + } } public DatasourceDTO getDataSourceDetails(String datasourceId){ @@ -253,6 +261,7 @@ public class DatasourceService { if (!types().stream().map(DataSourceType::getType).collect(Collectors.toList()).contains(updataDsRequest.getType())) { throw new Exception("Datasource type not supported."); } + updataDsRequest.setConfiguration(new String(java.util.Base64.getDecoder().decode(updataDsRequest.getConfiguration()))); checkName(updataDsRequest.getName(), updataDsRequest.getType(), updataDsRequest.getId()); Datasource datasource = new Datasource(); datasource.setName(updataDsRequest.getName()); @@ -284,6 +293,7 @@ public class DatasourceService { } public ResultHolder validate(Datasource datasource) throws Exception { + datasource.setConfiguration(new String(java.util.Base64.getDecoder().decode(datasource.getConfiguration()))); DatasourceDTO datasourceDTO = new DatasourceDTO(); BeanUtils.copyBean(datasourceDTO, datasource); try { @@ -372,6 +382,7 @@ public class DatasourceService { } public List getSchema(Datasource datasource) throws Exception { + datasource.setConfiguration(new String(java.util.Base64.getDecoder().decode(datasource.getConfiguration()))); Provider datasourceProvider = ProviderFactory.getProvider(datasource.getType()); DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setDatasource(datasource); diff --git a/frontend/src/views/system/datasource/DsAppForm.vue b/frontend/src/views/system/datasource/DsAppForm.vue index 01a5af6a2c..accd44632f 100644 --- a/frontend/src/views/system/datasource/DsAppForm.vue +++ b/frontend/src/views/system/datasource/DsAppForm.vue @@ -216,6 +216,7 @@ import PluginCom from '@/views/system/plugin/PluginCom' import { groupTree, appApply } from '@/api/panel/panel' import { dsGroupTree } from '@/api/dataset/dataset' import { deepCopy } from '@/components/canvas/utils/utils' +import { Base64 } from 'js-base64' export default { name: 'DsForm', components: { @@ -707,9 +708,9 @@ export default { if (valid) { const data = JSON.parse(JSON.stringify(this.form)) if (data.type === 'api') { - data.configuration = JSON.stringify(data.apiConfiguration) + data.configuration = Base64.encode(JSON.stringify(data.apiConfiguration)) } else { - data.configuration = JSON.stringify(data.configuration) + data.configuration = Base64.encode(JSON.stringify(data.configuration)) } if (data.showModel === 'show' && !this.canEdit) { validateDsById(data.id).then(res => { diff --git a/frontend/src/views/system/datasource/DsFormContent.vue b/frontend/src/views/system/datasource/DsFormContent.vue index cd3634b941..1c61d82349 100644 --- a/frontend/src/views/system/datasource/DsFormContent.vue +++ b/frontend/src/views/system/datasource/DsFormContent.vue @@ -226,10 +226,7 @@ >{{ $t('commons.cancel') }} {{ $t('commons.validate') }} @@ -307,6 +304,7 @@ import { dsGroupTree } from '@/api/dataset/dataset' import { appApply, appEdit, groupTree } from '@/api/panel/panel' import { deepCopy } from '@/components/canvas/utils/utils' import { hasDataPermission } from '@/utils/permission' +import { Base64 } from 'js-base64' export default { name: 'DsForm', @@ -710,6 +708,12 @@ export default { getDatasourceDetail(id, showModel) { this.$emit('update:formLoading', true) return getDatasourceDetail(id).then((res) => { + if(res.data.configuration){ + res.data.configuration = Base64.decode(res.data.configuration) + } + if(res.data.apiConfigurationStr){ + res.data.apiConfiguration = JSON.parse(Base64.decode(res.data.apiConfigurationStr)) + } this.params = { ...res.data, showModel } this.$emit('setParams', { ...this.params }) }).finally(() => { @@ -729,6 +733,12 @@ export default { const newArr = [] for (let index = 0; index < array.length; index++) { const element = array[index] + if(element.configuration){ + element.configuration = Base64.decode(element.configuration) + } + if(element.apiConfigurationStr){ + element.apiConfiguration = Base64.decode(element.apiConfigurationStr) + } if (this.msgNodeId) { if (element.id === this.msgNodeId) { element.msgNode = true @@ -967,9 +977,9 @@ export default { form.apiConfiguration.forEach((item) => { delete item.status }) - form.configuration = JSON.stringify(form.apiConfiguration) + form.configuration = Base64.encode(JSON.stringify(form.apiConfiguration)) } else { - form.configuration = JSON.stringify(form.configuration) + form.configuration = Base64.encode(JSON.stringify(form.configuration)) } const isAppMarket = this.positionCheck('appMarket') let appApplyForm @@ -1051,7 +1061,7 @@ export default { this.$refs.dsForm.validate((valid) => { if (valid) { const data = JSON.parse(JSON.stringify(this.form)) - data.configuration = JSON.stringify(data.configuration) + data.configuration = Base64.encode(JSON.stringify(data.configuration)) getSchema(data).then((res) => { this.schemas = res.data this.openMessageSuccess('commons.success') @@ -1102,9 +1112,9 @@ export default { if (valid) { const data = JSON.parse(JSON.stringify(this.form)) if (data.type === 'api') { - data.configuration = JSON.stringify(data.apiConfiguration) + data.configuration = Base64.encode(JSON.stringify(data.apiConfiguration)) } else { - data.configuration = JSON.stringify(data.configuration) + data.configuration = Base64.encode(JSON.stringify(data.configuration)) } if (data.showModel === 'show' && !this.canEdit) { validateDsById(data.id).then((res) => { diff --git a/frontend/src/views/system/datasource/DsTree.vue b/frontend/src/views/system/datasource/DsTree.vue index 23c25f6675..de2a068049 100644 --- a/frontend/src/views/system/datasource/DsTree.vue +++ b/frontend/src/views/system/datasource/DsTree.vue @@ -316,6 +316,7 @@