Compare commits

...

23 Commits

Author SHA1 Message Date
chenbowen
93186db1f8 Merge branch 'dev' into test 2025-10-29 09:01:32 +08:00
chenbowen
529f328dd7 Merge remote-tracking branch 'base-version/main' into dev 2025-10-29 09:00:57 +08:00
chenbowen
744567d999 新增组织查询调整 ids 2025-10-29 08:51:35 +08:00
chenbowen
10e2637838 1. 修复编译错误 2025-10-28 19:05:09 +08:00
chenbowen
213b854d66 1. 新增 e 办同步信息日志菜单 2025-10-28 18:07:27 +08:00
chenbowen
04597fad6c 1. 统一网关未命中缓存时,进行兜底查询
2. loginUser 新增 mobile username 作为 userInfo 扩展内容
2025-10-28 17:32:42 +08:00
chenbowen
558092238f Merge branch 'dev' into test 2025-10-28 14:53:57 +08:00
chenbowen
02d1896ebf 1. 升级版本
2. 修复因合并版本错误导致的代码生成器 bug
2025-10-28 14:53:41 +08:00
chenbowen
520e3e47f4 Merge branch 'dev' into test 2025-10-27 19:18:25 +08:00
chenbowen
ba85f45a05 Merge remote-tracking branch 'base-version/main' into dev 2025-10-27 19:18:07 +08:00
chenbowen
7aae0d0670 临时去除统一 api 签名校验 2025-10-27 19:17:20 +08:00
chenbowen
6bb331d883 Merge branch 'dev' into test 2025-10-27 10:01:35 +08:00
chenbowen
e8e6022ccd Merge remote-tracking branch 'base-version/main' into dev
# Conflicts:
#	zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java
2025-10-27 10:01:15 +08:00
chenbowen
4346299a03 1. 修复非永久地址的改动导致无法正常获取用户头像的 bug
2. 修复代码生成器执行同步时,没有依据导入进行简写匹配转化
2025-10-27 09:55:15 +08:00
chenbowen
384a6e3b07 Merge branch 'dev' into test 2025-10-24 17:05:37 +08:00
chenbowen
f72835c608 Merge remote-tracking branch 'base-version/main' into dev
# Conflicts:
#	zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/tenant/vo/tenant/TenantSaveReqVO.java
2025-10-24 17:05:16 +08:00
chenbowen
6e4cc4d55e 1. 修复界面bug
2. 新增 api 可配置匿名访问固定用户配置
3. 新增密码弱口令校验规则
4. e 办使用 loginName 确认唯一用户逻辑
2025-10-24 17:02:10 +08:00
chenbowen
b244743276 移除当前系统不存在的模块 2025-10-22 16:11:29 +08:00
chenbowen
ba88e00052 修复 supply 模式的接口被过滤的错误 2025-10-22 09:32:27 +08:00
chenbowen
7d1721c147 修复 supply 模式的接口被过滤的错误 2025-10-21 18:50:26 +08:00
chenbowen
fa2dc54aee 修复 supply 模式的接口被过滤的错误 2025-10-21 18:16:44 +08:00
chenbowen
b50524aa45 Merge branch 'dev' into test 2025-10-21 17:56:34 +08:00
chenbowen
4ba865b165 修复 supply 模式的接口被过滤的错误 2025-10-21 17:56:15 +08:00
78 changed files with 1545 additions and 334 deletions

View File

@@ -32,7 +32,7 @@
<url>https://github.com/YunaiV/ruoyi-vue-pro</url> <url>https://github.com/YunaiV/ruoyi-vue-pro</url>
<properties> <properties>
<revision>3.0.42</revision> <revision>3.0.43</revision>
<!-- Maven 相关 --> <!-- Maven 相关 -->
<java.version>17</java.version> <java.version>17</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source> <maven.compiler.source>${java.version}</maven.compiler.source>

View File

@@ -0,0 +1,10 @@
-- 同步接口日志菜单权限 SQL 脚本
-- 为同步接口日志查询界面创建相应的菜单和权限
-- 在审计日志(108)下新增同步日志菜单
INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted)
VALUES (502, '同步日志', '', 2, 3, 108, 'sync-log', 'ep:data-line', 'system/synclog/index', 'SystemSyncLog', 0, '1', '1', '1', 'admin', '2024-08-28 00:00:00', 'admin', '2024-08-28 00:00:00', '0');
-- 同步日志查询权限按钮
INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted)
VALUES (5020, '同步日志查询', 'system:sync-log:query', 3, 1, 502, '', '', '', '', 0, '1', '1', '1', 'admin', '2024-08-28 00:00:00', 'admin', '2024-08-28 00:00:00', '0');

View File

@@ -7,6 +7,12 @@ ALTER TABLE infra_file ADD aes_iv VARCHAR(128);
COMMENT ON COLUMN infra_file.aes_iv IS 'AES加密时的随机IVBase64编码'; COMMENT ON COLUMN infra_file.aes_iv IS 'AES加密时的随机IVBase64编码';
-- 3. Databus 客户端凭证新增匿名访问配置DM8
ALTER TABLE databus_api_client_credential ADD allow_anonymous BIT DEFAULT '0' NOT NULL;
ALTER TABLE databus_api_client_credential ADD anonymous_user_id BIGINT;
COMMENT ON COLUMN databus_api_client_credential.allow_anonymous IS '是否允许匿名访问';
COMMENT ON COLUMN databus_api_client_credential.anonymous_user_id IS '匿名访问固定用户';
-- 3 业务附件统一管理 -- 3 业务附件统一管理
DROP TABLE IF EXISTS infra_bsn_file; DROP TABLE IF EXISTS infra_bsn_file;
CREATE TABLE infra_bsn_file ( CREATE TABLE infra_bsn_file (

View File

@@ -656,6 +656,7 @@ INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_t
INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (36, 3, '本部门数据权限', '3', 'system_data_scope', 0, '', '', '本部门数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:16', '0'); INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (36, 3, '本部门数据权限', '3', 'system_data_scope', 0, '', '', '本部门数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:16', '0');
INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (37, 4, '本部门及以下数据权限', '4', 'system_data_scope', 0, '', '', '本部门及以下数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:21', '0'); INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (37, 4, '本部门及以下数据权限', '4', 'system_data_scope', 0, '', '', '本部门及以下数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:21', '0');
INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (38, 5, '仅本人数据权限', '5', 'system_data_scope', 0, '', '', '仅本人数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:23', '0'); INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (38, 5, '仅本人数据权限', '5', 'system_data_scope', 0, '', '', '仅本人数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:23', '0');
INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (200010, 6, '公司及所属部门数据权限', '6', 'system_data_scope', 0, '', '', '公司及所属部门数据权限', 'admin', '2021-01-05 17:03:48', '', '2025-10-24 00:00:00', '0');
INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (39, 0, '成功', '0', 'system_login_result', 0, 'success', '', '登陆结果 - 成功', '', '2021-01-18 06:17:36', '1', '2022-02-16 13:23:49', '0'); INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (39, 0, '成功', '0', 'system_login_result', 0, 'success', '', '登陆结果 - 成功', '', '2021-01-18 06:17:36', '1', '2022-02-16 13:23:49', '0');
INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (40, 10, '账号或密码不正确', '10', 'system_login_result', 0, 'primary', '', '登陆结果 - 账号或密码不正确', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:27', '0'); INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (40, 10, '账号或密码不正确', '10', 'system_login_result', 0, 'primary', '', '登陆结果 - 账号或密码不正确', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:27', '0');
INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (41, 20, '用户被禁用', '20', 'system_login_result', 0, 'warning', '', '登陆结果 - 用户被禁用', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:23:57', '0'); INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (41, 20, '用户被禁用', '20', 'system_login_result', 0, 'warning', '', '登陆结果 - 用户被禁用', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:23:57', '0');

View File

@@ -198,7 +198,7 @@ COMMENT ON COLUMN databus_api_transform.update_time IS '更新时间';
COMMENT ON COLUMN databus_api_transform.deleted IS '逻辑删除标记'; COMMENT ON COLUMN databus_api_transform.deleted IS '逻辑删除标记';
-- 统一外部网关 - 客户端凭证表DM8 -- 统一外部网关 - 客户端凭证表DM8
-- 可重复执行的建表脚本,执行前请备份历史数据 -- 可重复执行的建表脚本,执行前请备份历史数据
DROP TABLE IF EXISTS databus_api_client_credential; DROP TABLE IF EXISTS databus_api_client_credential;
@@ -212,6 +212,8 @@ CREATE TABLE databus_api_client_credential (
signature_type VARCHAR(32) NOT NULL, signature_type VARCHAR(32) NOT NULL,
enabled BIT DEFAULT '1' NOT NULL, enabled BIT DEFAULT '1' NOT NULL,
remark VARCHAR(255), remark VARCHAR(255),
allow_anonymous BIT DEFAULT '0' NOT NULL,
anonymous_user_id BIGINT,
creator VARCHAR(64) DEFAULT '' NOT NULL, creator VARCHAR(64) DEFAULT '' NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
updater VARCHAR(64) DEFAULT '' NOT NULL, updater VARCHAR(64) DEFAULT '' NOT NULL,
@@ -231,6 +233,8 @@ COMMENT ON COLUMN databus_api_client_credential.encryption_type IS '加密算法
COMMENT ON COLUMN databus_api_client_credential.signature_type IS '签名算法'; COMMENT ON COLUMN databus_api_client_credential.signature_type IS '签名算法';
COMMENT ON COLUMN databus_api_client_credential.enabled IS '是否启用'; COMMENT ON COLUMN databus_api_client_credential.enabled IS '是否启用';
COMMENT ON COLUMN databus_api_client_credential.remark IS '备注'; COMMENT ON COLUMN databus_api_client_credential.remark IS '备注';
COMMENT ON COLUMN databus_api_client_credential.allow_anonymous IS '是否允许匿名访问';
COMMENT ON COLUMN databus_api_client_credential.anonymous_user_id IS '匿名访问固定用户';
COMMENT ON COLUMN databus_api_client_credential.creator IS '创建者'; COMMENT ON COLUMN databus_api_client_credential.creator IS '创建者';
COMMENT ON COLUMN databus_api_client_credential.create_time IS '创建时间'; COMMENT ON COLUMN databus_api_client_credential.create_time IS '创建时间';
COMMENT ON COLUMN databus_api_client_credential.updater IS '更新者'; COMMENT ON COLUMN databus_api_client_credential.updater IS '更新者';

View File

@@ -26,7 +26,7 @@
<url>https://github.com/YunaiV/ruoyi-vue-pro</url> <url>https://github.com/YunaiV/ruoyi-vue-pro</url>
<properties> <properties>
<revision>3.0.42</revision> <revision>3.0.43</revision>
<flatten-maven-plugin.version>1.6.0</flatten-maven-plugin.version> <flatten-maven-plugin.version>1.6.0</flatten-maven-plugin.version>
<!-- 统一依赖管理 --> <!-- 统一依赖管理 -->
<spring.boot.version>3.4.5</spring.boot.version> <spring.boot.version>3.4.5</spring.boot.version>

View File

@@ -9,11 +9,7 @@ import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom; import java.security.SecureRandom;
import java.util.Base64; import java.util.*;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
/** /**
* 通用的签名、加解密工具类 * 通用的签名、加解密工具类
@@ -26,7 +22,7 @@ public final class CryptoSignatureUtils {
public static final String SIGNATURE_TYPE_SHA256 = "SHA256"; public static final String SIGNATURE_TYPE_SHA256 = "SHA256";
private static final String AES_TRANSFORMATION = "AES/ECB/PKCS5Padding"; private static final String AES_TRANSFORMATION = "AES/ECB/PKCS5Padding";
private static final String SIGNATURE_FIELD = "signature"; public static final String SIGNATURE_FIELD = "signature";
private CryptoSignatureUtils() { private CryptoSignatureUtils() {
} }

View File

@@ -0,0 +1,31 @@
package com.zt.plat.framework.common.validation;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;
/**
* 密码复杂度校验注解,要求至少包含大小写字母、数字、特殊字符中的三种。
* @author chenbowen
*/
@Target({
ElementType.METHOD,
ElementType.FIELD,
ElementType.ANNOTATION_TYPE,
ElementType.CONSTRUCTOR,
ElementType.PARAMETER,
ElementType.TYPE_USE
})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = PasswordValidator.class)
public @interface Password {
String message() default "密码必须包含大写字母、小写字母、数字、特殊字符中的至少三种";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}

View File

@@ -0,0 +1,38 @@
package com.zt.plat.framework.common.validation;
import cn.hutool.core.util.StrUtil;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
/**
* 密码复杂度校验:至少命中以下类别中的三类:大写字母、小写字母、数字、特殊字符。
*/
public class PasswordValidator implements ConstraintValidator<Password, String> {
@Override
public void initialize(Password constraintAnnotation) {
// no-op
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (StrUtil.isBlank(value)) {
// 空值交由 @NotEmpty 等注解处理;在无需修改密码时视为空密码通过
return true;
}
int categories = 0;
if (value.matches(".*[A-Z].*")) {
categories++;
}
if (value.matches(".*[a-z].*")) {
categories++;
}
if (value.matches(".*[0-9].*")) {
categories++;
}
if (value.matches(".*[^A-Za-z0-9].*")) {
categories++;
}
return categories >= 3;
}
}

View File

@@ -0,0 +1,31 @@
package com.zt.plat.framework.common.validation;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
class PasswordValidatorTest {
private final PasswordValidator validator = new PasswordValidator();
@Test
void shouldAcceptBlankPassword() {
assertTrue(validator.isValid(null, null));
assertTrue(validator.isValid("", null));
assertTrue(validator.isValid(" ", null));
}
@Test
void shouldRejectInsufficientComplexity() {
assertFalse(validator.isValid("abcdef", null));
assertFalse(validator.isValid("ABCDEF", null));
assertFalse(validator.isValid("ABC123", null));
}
@Test
void shouldAcceptComplexPassword() {
assertTrue(validator.isValid("Abc123!", null));
assertTrue(validator.isValid("1a#BCdef", null));
}
}

Some files were not shown because too many files have changed in this diff Show More