getRoleCodeList() {
+ return ROLE_CODE_LIST.get();
+ }
+ public static void clearRoleCodeList(){
+ ROLE_CODE_LIST.remove();
+ }
+
public static void clear() {
DEPT_ID.remove();
COMPANY_ID.remove();
IGNORE.remove();
+ ROLE_CODE_LIST.remove();
}
}
diff --git a/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/controller/admin/gateway/vo/credential/ApiClientCredentialRespVO.java b/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/controller/admin/gateway/vo/credential/ApiClientCredentialRespVO.java
index 33e2dbe7..a4cc7ec5 100644
--- a/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/controller/admin/gateway/vo/credential/ApiClientCredentialRespVO.java
+++ b/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/controller/admin/gateway/vo/credential/ApiClientCredentialRespVO.java
@@ -42,6 +42,9 @@ public class ApiClientCredentialRespVO {
@Schema(description = "匿名访问固定用户昵称", example = "张三")
private String anonymousUserNickname;
+ @Schema(description = "是否启用加密", example = "true")
+ private Boolean enableEncryption;
+
@Schema(description = "创建时间")
private LocalDateTime createTime;
diff --git a/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/controller/admin/gateway/vo/credential/ApiClientCredentialSaveReqVO.java b/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/controller/admin/gateway/vo/credential/ApiClientCredentialSaveReqVO.java
index 11043ac5..796b1704 100644
--- a/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/controller/admin/gateway/vo/credential/ApiClientCredentialSaveReqVO.java
+++ b/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/controller/admin/gateway/vo/credential/ApiClientCredentialSaveReqVO.java
@@ -45,4 +45,8 @@ public class ApiClientCredentialSaveReqVO {
@Schema(description = "匿名访问固定用户 ID", example = "1024")
private Long anonymousUserId;
+ @Schema(description = "是否启用加密", example = "true")
+ @NotNull(message = "启用加密标识不能为空")
+ private Boolean enableEncryption;
+
}
diff --git a/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/dal/dataobject/gateway/ApiClientCredentialDO.java b/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/dal/dataobject/gateway/ApiClientCredentialDO.java
index 0bf5134f..7b44ecce 100644
--- a/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/dal/dataobject/gateway/ApiClientCredentialDO.java
+++ b/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/dal/dataobject/gateway/ApiClientCredentialDO.java
@@ -38,4 +38,6 @@ public class ApiClientCredentialDO extends BaseDO {
private Long anonymousUserId;
+ private Boolean enableEncryption;
+
}
diff --git a/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/framework/integration/gateway/security/GatewaySecurityFilter.java b/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/framework/integration/gateway/security/GatewaySecurityFilter.java
index f9e5754d..b37dfb76 100644
--- a/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/framework/integration/gateway/security/GatewaySecurityFilter.java
+++ b/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/framework/integration/gateway/security/GatewaySecurityFilter.java
@@ -238,6 +238,11 @@ public class GatewaySecurityFilter extends OncePerRequestFilter {
private byte[] decryptRequestBody(byte[] originalBody,
ApiClientCredentialDO credential,
ApiGatewayProperties.Security security) {
+ // 检查是否启用加密,如果未启用则直接返回原文
+ if (credential != null && Boolean.FALSE.equals(credential.getEnableEncryption())) {
+ return originalBody != null ? originalBody : new byte[0];
+ }
+
if (originalBody == null || originalBody.length == 0) {
return new byte[0];
}
@@ -390,6 +395,11 @@ public class GatewaySecurityFilter extends OncePerRequestFilter {
private void encryptResponse(ContentCachingResponseWrapper responseWrapper,
ApiClientCredentialDO credential,
ApiGatewayProperties.Security security) throws IOException {
+ // 检查是否启用加密,如果未启用则直接返回,不加密响应
+ if (credential != null && Boolean.FALSE.equals(credential.getEnableEncryption())) {
+ return;
+ }
+
if (!security.isEncryptResponse()) {
return;
}
@@ -524,6 +534,10 @@ public class GatewaySecurityFilter extends OncePerRequestFilter {
if (security == null || credential == null) {
return false;
}
+ // 检查是否启用加密,如果未启用则不加密错误响应
+ if (Boolean.FALSE.equals(credential.getEnableEncryption())) {
+ return false;
+ }
if (!security.isEncryptResponse()) {
return false;
}
diff --git a/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/file/dto/FileRespDTO.java b/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/file/dto/FileRespDTO.java
index 01093d15..58af4c9a 100644
--- a/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/file/dto/FileRespDTO.java
+++ b/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/file/dto/FileRespDTO.java
@@ -34,4 +34,7 @@ public class FileRespDTO {
@Schema(description = "文件内容", requiredMode = Schema.RequiredMode.REQUIRED)
private byte[] content;
+ @Schema(description = "文件下载次数")
+ private Integer downloadCount;
+
}
\ No newline at end of file
diff --git a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/file/FileController.java b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/file/FileController.java
index 101a2654..d4b971a9 100644
--- a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/file/FileController.java
+++ b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/file/FileController.java
@@ -133,6 +133,10 @@ public class FileController {
response.setStatus(HttpStatus.NOT_FOUND.value());
return;
}
+
+ // 统计下载次数
+ fileService.incDownloadCount(configId,path);
+
writeAttachment(response, path, content);
}
diff --git a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/file/vo/file/FileRespVO.java b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/file/vo/file/FileRespVO.java
index 161cf629..6d4d12f4 100644
--- a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/file/vo/file/FileRespVO.java
+++ b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/file/vo/file/FileRespVO.java
@@ -99,4 +99,7 @@ public class FileRespVO {
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
+ @Schema(description = "下载次数")
+ private Integer downloadCount;
+
}
diff --git a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/dal/dataobject/file/FileDO.java b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/dal/dataobject/file/FileDO.java
index 131ea253..c82c0e3c 100644
--- a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/dal/dataobject/file/FileDO.java
+++ b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/dal/dataobject/file/FileDO.java
@@ -65,6 +65,11 @@ public class FileDO extends BaseDO {
*/
private String aesIv;
+ /**
+ * 文件下载次数统计
+ */
+ private Integer downloadCount;
+
/**
* 是否加密
*
diff --git a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/dal/mysql/file/FileMapper.java b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/dal/mysql/file/FileMapper.java
index df330c49..9857cdc2 100644
--- a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/dal/mysql/file/FileMapper.java
+++ b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/dal/mysql/file/FileMapper.java
@@ -6,6 +6,8 @@ import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.module.infra.controller.admin.file.vo.file.FilePageReqVO;
import com.zt.plat.module.infra.dal.dataobject.file.FileDO;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Update;
/**
* 文件操作 Mapper
@@ -32,4 +34,7 @@ public interface FileMapper extends BaseMapperX {
return selectFirstOne(FileDO::getHash, hash);
}
+
+ @Update("UPDATE INFRA_FILE SET DOWNLOAD_COUNT = DOWNLOAD_COUNT + 1 WHERE CONFIG_ID = #{configId} AND PATH = #{path}")
+ int incDownloadCount(@Param("configId") Long configId, @Param("path") String path);
}
diff --git a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/service/file/FileService.java b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/service/file/FileService.java
index 96e6b3d4..6624810c 100644
--- a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/service/file/FileService.java
+++ b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/service/file/FileService.java
@@ -112,4 +112,11 @@ public interface FileService {
FileDO getActiveFileById(Long fileId);
boolean verifyCode(Long fileId, Long userId, String code) throws Exception;
+
+ /**
+ * 更新文件下载次数
+ * @param configId
+ * @param path
+ */
+ void incDownloadCount(Long configId, String path);
}
diff --git a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/service/file/FileServiceImpl.java b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/service/file/FileServiceImpl.java
index 2c62ec69..14f42c77 100644
--- a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/service/file/FileServiceImpl.java
+++ b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/service/file/FileServiceImpl.java
@@ -334,4 +334,9 @@ public class FileServiceImpl implements FileService {
}
}
+ @Override
+ public void incDownloadCount(Long configId, String path) {
+ fileMapper.incDownloadCount(configId, path);
+ }
+
}
diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/api/permission/PermissionApiImpl.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/api/permission/PermissionApiImpl.java
index 771f322b..c3899330 100644
--- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/api/permission/PermissionApiImpl.java
+++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/api/permission/PermissionApiImpl.java
@@ -86,4 +86,8 @@ public class PermissionApiImpl implements PermissionApi {
return success(permissionService.getDeptDataPermission(userId));
}
+ @Override
+ public CommonResult getDeptDataPermissionWithRoleCodes(Long userId, String roleCodes) {
+ return success(permissionService.getDeptDataPermissionWithRoleCodes(userId, roleCodes));
+ }
}
diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/dept/DeptController.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/dept/DeptController.java
index 93876898..54ba9b37 100644
--- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/dept/DeptController.java
+++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/dept/DeptController.java
@@ -123,7 +123,7 @@ public class DeptController {
@GetMapping("/top-level-list")
@Operation(summary = "获取当前用户可访问的顶级部门列表", description = "用于懒加载,返回当前用户所属部门的最顶层祖先部门,如果用户没有关联任何部门则返回空列表")
- @PreAuthorize("@ss.hasPermission('system:dept:query')")
+// @PreAuthorize("@ss.hasPermission('system:dept:query')")
public CommonResult> getTopLevelDeptList() {
List list = deptService.getTopLevelDeptList();
return success(BeanUtils.toBean(list, DeptRespVO.class));
diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionService.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionService.java
index a1a88dd3..69a4857c 100644
--- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionService.java
+++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionService.java
@@ -143,6 +143,7 @@ public interface PermissionService {
* @return 部门数据权限
*/
DeptDataPermissionRespDTO getDeptDataPermission(Long userId);
+ DeptDataPermissionRespDTO getDeptDataPermissionWithRoleCodes(Long userId, String roleCodes);
/**
* 获得用户的数据权限级别
diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionServiceImpl.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionServiceImpl.java
index 6bb37d18..52265633 100644
--- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionServiceImpl.java
+++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionServiceImpl.java
@@ -3,6 +3,7 @@ package com.zt.plat.module.system.service.permission;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.google.common.annotations.VisibleForTesting;
@@ -12,6 +13,7 @@ import com.zt.plat.framework.common.biz.system.permission.dto.DeptDataPermission
import com.zt.plat.framework.common.enums.CommonStatusEnum;
import com.zt.plat.framework.common.util.collection.CollectionUtils;
import com.zt.plat.framework.datapermission.core.annotation.DataPermission;
+import com.zt.plat.framework.tenant.core.context.DeptContextHolder;
import com.zt.plat.module.system.dal.dataobject.permission.MenuDO;
import com.zt.plat.module.system.dal.dataobject.permission.RoleDO;
import com.zt.plat.module.system.dal.dataobject.permission.RoleMenuDO;
@@ -347,6 +349,12 @@ public class PermissionServiceImpl implements PermissionService {
// 获得用户的角色
List roles = getEnableUserRoleListByUserIdFromCache(userId);
+ //使用上下文角色编码过滤
+ List contextRoleCodes = DeptContextHolder.getRoleCodeList();
+ if(!CollectionUtil.isEmpty(contextRoleCodes)){
+ roles = roles.stream().filter(role -> contextRoleCodes.contains(role.getCode())).collect(Collectors.toList());
+ }
+
// 获得用户的部门编号的缓存,通过 Guava 的 Suppliers 惰性求值,即有且仅有第一次发起 DB 的查询
Supplier> userDeptIds = Suppliers.memoize(() -> {
List validUserDeptListByUserId = userDeptService.getValidUserDeptListByUserIds(singleton(userId));
@@ -414,6 +422,26 @@ public class PermissionServiceImpl implements PermissionService {
return result;
}
+ @Override
+ public DeptDataPermissionRespDTO getDeptDataPermissionWithRoleCodes(Long userId, String roleCodes) {
+ // 获得用户的角色
+ List roles = getEnableUserRoleListByUserIdFromCache(userId);
+ if(ObjectUtil.isEmpty(roleCodes))
+ return getDeptDataPermission(userId);
+ List roleCodesList = Arrays.asList(roleCodes.split(","));
+ if(CollectionUtil.isEmpty(roles))
+ return getDeptDataPermission(userId);
+ DeptContextHolder.setRoleCodeList(roleCodesList);
+ try{
+ return getDeptDataPermission(userId);
+ }catch (Exception e){
+ log.error("getDeptDataPermission-- error ", e);
+ }finally {
+ DeptContextHolder.clearRoleCodeList();
+ }
+ return getDeptDataPermission(userId);
+ }
+
@Override
@DataPermission(enable = false)
@TenantIgnore
diff --git a/zt-server/pom.xml b/zt-server/pom.xml
index fb6ac7b2..e7afb362 100644
--- a/zt-server/pom.xml
+++ b/zt-server/pom.xml
@@ -43,11 +43,11 @@
-
- com.zt.plat
- zt-module-template-server
- ${revision}
-
+
+
+
+
+
diff --git a/zt-server/src/main/resources/application-dev.yaml b/zt-server/src/main/resources/application-dev.yaml
index e6c2caea..2a3d7761 100644
--- a/zt-server/src/main/resources/application-dev.yaml
+++ b/zt-server/src/main/resources/application-dev.yaml
@@ -62,7 +62,8 @@ spring:
host: 172.16.46.63 # 地址
port: 30379 # 端口
database: 0 # 数据库索引
-# password: 123456 # 密码,建议生产环境开启
+ password: P@ssword25
+ username: zt-redis
--- #################### 定时任务相关配置 ####################
@@ -76,7 +77,7 @@ xxl:
# rocketmq 配置项,对应 RocketMQProperties 配置类
rocketmq:
- name-server: 127.0.0.1:9876 # RocketMQ Namesrv
+ name-server: 172.16.46.63:30876 # RocketMQ Namesrv
spring:
# RabbitMQ 配置项,对应 RabbitProperties 配置类