From 7e8445ba8c4d62c9b6b51ffcf12b3f080e98efb2 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Tue, 7 Mar 2023 17:55:19 +0800 Subject: [PATCH 1/6] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=85=AC=E5=85=B1?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E8=8E=B7=E5=8F=96=E5=A4=9A=E4=BD=99=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=BF=A1=E6=81=AF=E6=BC=8F=E6=B4=9E=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataease/auth/api/dto/CurrentUserDto.java | 5 ++++ .../auth/service/impl/ShiroServiceImpl.java | 2 +- .../controller/sys/SystemInfoController.java | 23 +++++++++++++++---- .../io/dataease/dto/UserLoginInfoDTO.java | 5 ++++ .../dataease/service/SystemInfoService.java | 20 ++++++++-------- frontend/src/api/systemInfo/userLogin.js | 4 ++-- .../canvas/components/editor/Preview.vue | 2 +- 7 files changed, 44 insertions(+), 17 deletions(-) diff --git a/backend/src/main/java/io/dataease/auth/api/dto/CurrentUserDto.java b/backend/src/main/java/io/dataease/auth/api/dto/CurrentUserDto.java index 9bc1ac61e3..8e056e51a2 100644 --- a/backend/src/main/java/io/dataease/auth/api/dto/CurrentUserDto.java +++ b/backend/src/main/java/io/dataease/auth/api/dto/CurrentUserDto.java @@ -17,4 +17,9 @@ public class CurrentUserDto extends SysUserEntity implements Serializable { @ApiModelProperty("权限集合") private List permissions; + + public CurrentUserDto(String username, String nickName) { + super.setUsername(username); + super.setNickName(nickName); + } } diff --git a/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java b/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java index b076281cf3..e355173d78 100644 --- a/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java +++ b/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java @@ -129,7 +129,7 @@ public class ShiroServiceImpl implements ShiroService { filterChainDefinitionMap.put("/panel/group/exportDetails", ANON); filterChainDefinitionMap.put("/dataset/field/linkMultFieldValues", "link"); filterChainDefinitionMap.put("/dataset/field/linkMappingFieldValues", "link"); - filterChainDefinitionMap.put("/systemInfo/proxyUserLoginInfo/**", ANON); + filterChainDefinitionMap.put("/systemInfo/proxyUserLoginInfo", ANON); filterChainDefinitionMap.put("/**", "authc"); diff --git a/backend/src/main/java/io/dataease/controller/sys/SystemInfoController.java b/backend/src/main/java/io/dataease/controller/sys/SystemInfoController.java index 5322ca8e12..a7203dc9dc 100644 --- a/backend/src/main/java/io/dataease/controller/sys/SystemInfoController.java +++ b/backend/src/main/java/io/dataease/controller/sys/SystemInfoController.java @@ -1,14 +1,20 @@ package io.dataease.controller.sys; +import com.auth0.jwt.JWT; +import com.auth0.jwt.interfaces.DecodedJWT; +import io.dataease.auth.filter.F2CLinkFilter; import io.dataease.dto.UserLoginInfoDTO; import io.dataease.service.SystemInfoService; +import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; import springfox.documentation.annotations.ApiIgnore; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.io.IOException; @ApiIgnore @@ -23,8 +29,17 @@ public class SystemInfoController { return systemInfoService.getUserLoginInfo(null); } - @GetMapping("proxyUserLoginInfo/{userId}") - public UserLoginInfoDTO proxyUserLoginInfo(@PathVariable String userId) throws IOException { - return systemInfoService.getUserLoginInfo(userId); + @GetMapping("proxyUserLoginInfo") + public UserLoginInfoDTO proxyUserLoginInfo() throws IOException { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) + .getRequest(); + String linkToken = request.getHeader(F2CLinkFilter.LINK_TOKEN_KEY); + if (StringUtils.isNotEmpty(linkToken)) { + DecodedJWT jwt = JWT.decode(linkToken); + return systemInfoService.getUserLoginInfo(jwt.getClaim("userId").asLong()); + } else { + return null; + } + } } diff --git a/backend/src/main/java/io/dataease/dto/UserLoginInfoDTO.java b/backend/src/main/java/io/dataease/dto/UserLoginInfoDTO.java index 35be339932..de3743175b 100644 --- a/backend/src/main/java/io/dataease/dto/UserLoginInfoDTO.java +++ b/backend/src/main/java/io/dataease/dto/UserLoginInfoDTO.java @@ -22,4 +22,9 @@ public class UserLoginInfoDTO { this.userInfo = userInfo; this.ip = ip; } + + public UserLoginInfoDTO(String username, String nickname, String ip) { + this.userInfo = new CurrentUserDto(username, nickname); + this.ip = ip; + } } diff --git a/backend/src/main/java/io/dataease/service/SystemInfoService.java b/backend/src/main/java/io/dataease/service/SystemInfoService.java index b9d2dfb7e3..72e5770efb 100644 --- a/backend/src/main/java/io/dataease/service/SystemInfoService.java +++ b/backend/src/main/java/io/dataease/service/SystemInfoService.java @@ -2,12 +2,10 @@ package io.dataease.service; import io.dataease.auth.api.dto.CurrentUserDto; import io.dataease.commons.utils.AuthUtils; -import io.dataease.commons.utils.BeanUtils; import io.dataease.commons.utils.IPUtils; import io.dataease.dto.UserLoginInfoDTO; import io.dataease.plugins.common.base.domain.SysUser; import io.dataease.plugins.common.base.mapper.SysUserMapper; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -18,14 +16,18 @@ public class SystemInfoService { @Resource private SysUserMapper sysUserMapper; - public UserLoginInfoDTO getUserLoginInfo(String userId) { - if (StringUtils.isNotEmpty(userId)) { - SysUser userInfo = sysUserMapper.selectByPrimaryKey(Long.parseLong(userId)); - CurrentUserDto userDto = new CurrentUserDto(); - BeanUtils.copyBean(userDto, userInfo); - return new UserLoginInfoDTO(userDto, IPUtils.get()); + public UserLoginInfoDTO getUserLoginInfo(Long userId) { + if (userId != null) { + SysUser userInfo = sysUserMapper.selectByPrimaryKey(userId); + return new UserLoginInfoDTO(userInfo.getUsername(), userInfo.getNickName(), IPUtils.get()); + } + CurrentUserDto userDto = AuthUtils.getUser(); + if (userDto != null) { + return new UserLoginInfoDTO(userDto.getUsername(), userDto.getNickName(), IPUtils.get()); + } else { + return new UserLoginInfoDTO(null, null, IPUtils.get()); } - return new UserLoginInfoDTO(AuthUtils.getUser(), IPUtils.get()); } + } diff --git a/frontend/src/api/systemInfo/userLogin.js b/frontend/src/api/systemInfo/userLogin.js index 87ab9fc4af..3c57c99ed4 100644 --- a/frontend/src/api/systemInfo/userLogin.js +++ b/frontend/src/api/systemInfo/userLogin.js @@ -8,9 +8,9 @@ export function userLoginInfo() { }) } -export function proxyUserLoginInfo(userId) { +export function proxyUserLoginInfo() { return request({ - url: '/systemInfo/proxyUserLoginInfo/' + userId, + url: '/systemInfo/proxyUserLoginInfo', method: 'get', loading: false }) diff --git a/frontend/src/components/canvas/components/editor/Preview.vue b/frontend/src/components/canvas/components/editor/Preview.vue index 6e305c0772..0f0bf5474c 100644 --- a/frontend/src/components/canvas/components/editor/Preview.vue +++ b/frontend/src/components/canvas/components/editor/Preview.vue @@ -485,7 +485,7 @@ export default { activeWatermark(this.panelInfo.watermarkInfo.settingContent, this.userInfo, waterDomId, this.canvasId, this.panelInfo.watermarkOpen) } else { const method = this.userId ? proxyUserLoginInfo : userLoginInfo - method(this.userId).then(res => { + method().then(res => { this.userInfo = res.data activeWatermark(this.panelInfo.watermarkInfo.settingContent, this.userInfo, waterDomId, this.canvasId, this.panelInfo.watermarkOpen) }) From 866b696fbd96248997b7412cc4022fb5791a0fe6 Mon Sep 17 00:00:00 2001 From: dataeaseShu <106045316+dataeaseShu@users.noreply.github.com> Date: Tue, 7 Mar 2023 18:43:29 +0800 Subject: [PATCH 2/6] =?UTF-8?q?fix:=20SQL=E6=95=B0=E6=8D=AE=E9=9B=86?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E6=95=B0=E6=8D=AE=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/dataset/add/AddSQL.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/views/dataset/add/AddSQL.vue b/frontend/src/views/dataset/add/AddSQL.vue index 25c7b80365..bfbfa3275c 100644 --- a/frontend/src/views/dataset/add/AddSQL.vue +++ b/frontend/src/views/dataset/add/AddSQL.vue @@ -911,7 +911,7 @@ export default { }, initTableInfo() { - if (this.param.tableId) { + if (this.param.tableId || this.$route.query.id) { getTable(this.param.tableId).then((response) => { const table = response.data this.dataSource = table.dataSourceId From fe14ddc2a9c141e212e13f9b6b9f8b2819f872f6 Mon Sep 17 00:00:00 2001 From: dataeaseShu <106045316+dataeaseShu@users.noreply.github.com> Date: Tue, 7 Mar 2023 18:45:39 +0800 Subject: [PATCH 3/6] =?UTF-8?q?fix:=20SQL=E6=95=B0=E6=8D=AE=E9=9B=86?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E6=95=B0=E6=8D=AE=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/dataset/add/AddSQL.vue | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/src/views/dataset/add/AddSQL.vue b/frontend/src/views/dataset/add/AddSQL.vue index bfbfa3275c..a5860f5e15 100644 --- a/frontend/src/views/dataset/add/AddSQL.vue +++ b/frontend/src/views/dataset/add/AddSQL.vue @@ -911,8 +911,9 @@ export default { }, initTableInfo() { - if (this.param.tableId || this.$route.query.id) { - getTable(this.param.tableId).then((response) => { + const tableId = this.param.tableId || this.$route.query.id + if (tableId) { + getTable(tableId).then((response) => { const table = response.data this.dataSource = table.dataSourceId this.changeDatasource() From 228fd36b1d8b9f5364fbefe3c1baffc842f4efae Mon Sep 17 00:00:00 2001 From: taojinlong Date: Wed, 8 Mar 2023 09:19:12 +0800 Subject: [PATCH 4/6] =?UTF-8?q?fix:=20=E6=95=B0=E6=8D=AE=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E8=AE=B0=E5=BD=95=E5=AF=BC=E5=87=BA=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E4=BC=9A=E6=8A=A5=E9=94=99=E7=A9=BA=E6=8C=87?= =?UTF-8?q?=E9=92=88=20#4708?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/service/dataset/DataSetTableTaskLogService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskLogService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskLogService.java index 387ef5d355..6b6fe46f60 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskLogService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskLogService.java @@ -80,7 +80,7 @@ public class DataSetTableTaskLogService { row[0] = item.getName(); row[1] = item.getDatasetName(); row[2] = DateUtil.formatDateTime(new Date(item.getStartTime())); - row[3] = DateUtil.formatDateTime(new Date(item.getEndTime())); + row[3] = item.getEndTime() != null ? DateUtil.formatDateTime(new Date(item.getEndTime())) : ""; row[4] = Translator.get("I18N_TASK_LOG_" + item.getStatus().toUpperCase()) ; return row; }).collect(Collectors.toList()); From 857649bdb08f820d04f78e7be8581d77f9d8aa45 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Wed, 8 Mar 2023 10:27:07 +0800 Subject: [PATCH 5/6] =?UTF-8?q?refactor:=20=E5=8D=87=E7=BA=A7=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/resources/db/migration/V52__1.18.5.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 backend/src/main/resources/db/migration/V52__1.18.5.sql diff --git a/backend/src/main/resources/db/migration/V52__1.18.5.sql b/backend/src/main/resources/db/migration/V52__1.18.5.sql new file mode 100644 index 0000000000..388bf70ea5 --- /dev/null +++ b/backend/src/main/resources/db/migration/V52__1.18.5.sql @@ -0,0 +1,4 @@ +UPDATE `my_plugin` +SET `version` = '1.18.5' +where `plugin_id` > 0 + and `version` = '1.18.4'; From 44cb46fb7d97736729abb87a2ccac7209afedc45 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Wed, 8 Mar 2023 11:24:47 +0800 Subject: [PATCH 6/6] =?UTF-8?q?fix:=20=E5=8F=82=E6=95=B0=E9=A2=84=E8=A7=88?= =?UTF-8?q?=E6=97=B6=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataease/service/chart/ChartViewService.java | 2 +- .../service/chart/ViewPluginBaseServiceImpl.java | 2 +- .../service/dataset/DataSetTableService.java | 14 +++++++++----- .../dataset/impl/direct/DirectFieldService.java | 2 +- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java index 559f63cfb6..0612c5f440 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -1846,7 +1846,7 @@ public class ChartViewService { } } } - sql = dataSetTableService.handleVariableDefaultValue(sql, null, ds.getType()); + sql = dataSetTableService.handleVariableDefaultValue(sql, null, ds.getType(), false); return sql; } diff --git a/backend/src/main/java/io/dataease/service/chart/ViewPluginBaseServiceImpl.java b/backend/src/main/java/io/dataease/service/chart/ViewPluginBaseServiceImpl.java index cc2c25f6be..a8707f05fd 100644 --- a/backend/src/main/java/io/dataease/service/chart/ViewPluginBaseServiceImpl.java +++ b/backend/src/main/java/io/dataease/service/chart/ViewPluginBaseServiceImpl.java @@ -122,7 +122,7 @@ public class ViewPluginBaseServiceImpl implements ViewPluginBaseService { break; case SQL: String sql = dataTableInfoDTO.isBase64Encryption() ? new String(java.util.Base64.getDecoder().decode(dataTableInfoDTO.getSql())) : dataTableInfoDTO.getSql(); - tableName = dataSetTableService.handleVariableDefaultValue(sql, null, pluginViewSet.getDsType()); + tableName = dataSetTableService.handleVariableDefaultValue(sql, null, pluginViewSet.getDsType(), false); tableName = "(" + sqlFix(tableName) + ")"; break; case CUSTOM: diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index afa591b348..aab9f1367e 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -701,7 +701,7 @@ public class DataSetTableService { datasourceRequest.setDatasource(ds); DataTableInfoDTO dataTableInfo = new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class); String sql = dataTableInfo.isBase64Encryption() ? new String(java.util.Base64.getDecoder().decode(dataTableInfo.getSql())) : dataTableInfo.getSql(); - sql = handleVariableDefaultValue(sql, datasetTable.getSqlVariableDetails(), ds.getType()); + sql = handleVariableDefaultValue(sql, datasetTable.getSqlVariableDetails(), ds.getType(), false); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); datasourceRequest.setQuery( qp.createQuerySQLWithPage(sql, fields, page, pageSize, realSize, false, null, rowPermissionsTree)); @@ -1049,7 +1049,7 @@ public class DataSetTableService { } } - public String handleVariableDefaultValue(String sql, String sqlVariableDetails, String dsType) { + public String handleVariableDefaultValue(String sql, String sqlVariableDetails, String dsType, boolean isEdit) { if (StringUtils.isEmpty(sql)) { DataEaseException.throwException(Translator.get("i18n_sql_not_empty")); } @@ -1065,10 +1065,14 @@ public class DataSetTableService { break; } } - if (defaultsSqlVariableDetail != null && defaultsSqlVariableDetail.getDefaultValueScope() != null && + if (!isEdit && defaultsSqlVariableDetail != null && defaultsSqlVariableDetail.getDefaultValueScope() != null && defaultsSqlVariableDetail.getDefaultValueScope().equals(SqlVariableDetails.DefaultValueScope.ALLSCOPE) && StringUtils.isNotEmpty(defaultsSqlVariableDetail.getDefaultValue())) { sql = sql.replace(matcher.group(), defaultsSqlVariableDetail.getDefaultValue()); } + if (isEdit && defaultsSqlVariableDetail != null && defaultsSqlVariableDetail.getDefaultValueScope() != null && + defaultsSqlVariableDetail.getDefaultValueScope().equals(SqlVariableDetails.DefaultValueScope.EDIT) && StringUtils.isNotEmpty(defaultsSqlVariableDetail.getDefaultValue())) { + sql = sql.replace(matcher.group(), defaultsSqlVariableDetail.getDefaultValue()); + } } } @@ -1261,7 +1265,7 @@ public class DataSetTableService { datasourceRequest.setDatasource(ds); - sql = handleVariableDefaultValue(sql, dataSetTableRequest.getSqlVariableDetails(), ds.getType()); + sql = handleVariableDefaultValue(sql, dataSetTableRequest.getSqlVariableDetails(), ds.getType(), true); if (StringUtils.isEmpty(sql)) { DataEaseException.throwException(Translator.get("i18n_sql_not_empty")); } @@ -1927,7 +1931,7 @@ public class DataSetTableService { QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); DataTableInfoDTO dataTableInfo = new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class); String sql = dataTableInfo.isBase64Encryption() ? new String(java.util.Base64.getDecoder().decode(dataTableInfo.getSql())) : dataTableInfo.getSql(); - sql = handleVariableDefaultValue(sql, null, ds.getType()); + sql = handleVariableDefaultValue(sql, null, ds.getType(), false); String sqlAsTable = qp.createSQLPreview(sql, null); datasourceRequest.setQuery(sqlAsTable); fields = datasourceProvider.fetchResultField(datasourceRequest); diff --git a/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java b/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java index 75c5001c82..a9ea417204 100644 --- a/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java +++ b/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java @@ -171,7 +171,7 @@ public class DirectFieldService implements DataSetFieldService { if (dataTableInfoDTO.isBase64Encryption()) { sql = new String(java.util.Base64.getDecoder().decode(sql)); } - sql = dataSetTableService.handleVariableDefaultValue(sql, datasetTable.getSqlVariableDetails(), ds.getType()); + sql = dataSetTableService.handleVariableDefaultValue(sql, null, ds.getType(), false); datasourceRequest.setQuery(qp.createQuerySQLAsTmp(sql, permissionFields, !needSort, customFilter, rowPermissionsTree, deSortFields)); } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), DatasetType.CUSTOM.toString())) { DataTableInfoDTO dt = new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class);