diff --git a/xtools-app-common/xtools-app-common-cache/src/main/java/xtools/app/common/cache/enums/AppCache.java b/xtools-app-common/xtools-app-common-cache/src/main/java/xtools/app/common/cache/enums/AppCache.java index 0b84d27..944e3fe 100644 --- a/xtools-app-common/xtools-app-common-cache/src/main/java/xtools/app/common/cache/enums/AppCache.java +++ b/xtools-app-common/xtools-app-common-cache/src/main/java/xtools/app/common/cache/enums/AppCache.java @@ -34,6 +34,8 @@ public enum AppCache implements BaseCacheEnum { // JOB锁 LOCK_JOB("lock:job:", 5 * 60L), + // SYS用户锁 + LOCK_SYS_USER("lock:sys-user:", -1L), // 风控IP RISK_IP("risk:ip:", -1L), @@ -42,12 +44,17 @@ public enum AppCache implements BaseCacheEnum { // 系统参数缓存 SYS_CACHE_PARAM("sys:cache:param:", -1L), + // 账号密码规则缓存 + SYS_CACHE_AP_RULE("sys:cache:ap-rule", -1L), // 系统JAR包缓存 SYS_CACHE_JAR("sys:cache:jar:", -1L), // 地址缓存 SYS_CACHE_ADDR("sys:cache:addr:", 60 * 60L), // 天气缓存 SYS_CACHE_HOME_WEATHER("sys:cache:home:weather:", 30 * 60L), + + // 系统账号密码错误次数 + COUNT_SYS_USER_PASSWD_ERR("count:sys-user:passwd-err:", -1L) ; /** diff --git a/xtools-app-common/xtools-app-common-task/src/main/java/xtools/app/common/task/enums/TaskType.java b/xtools-app-common/xtools-app-common-task/src/main/java/xtools/app/common/task/enums/TaskType.java index 62a3496..ce068a0 100644 --- a/xtools-app-common/xtools-app-common-task/src/main/java/xtools/app/common/task/enums/TaskType.java +++ b/xtools-app-common/xtools-app-common-task/src/main/java/xtools/app/common/task/enums/TaskType.java @@ -22,6 +22,8 @@ public enum TaskType implements BaseTaskType { DEL_SYS_LOG(20, "删除系统日志"), // 删除系统文件 DEL_SYS_FILE(30, "删除系统文件"), + // 删除禁用的系统用户 + DEL_DISABLE_SYS_USER(40, "删除禁用的系统用户"), ; /** diff --git a/xtools-app-sys/xtools-app-sys-api/src/main/java/xtools/app/sys/api/SysUserPasswdRuleApi.java b/xtools-app-sys/xtools-app-sys-api/src/main/java/xtools/app/sys/api/SysUserPasswdRuleApi.java new file mode 100644 index 0000000..ffdb192 --- /dev/null +++ b/xtools-app-sys/xtools-app-sys-api/src/main/java/xtools/app/sys/api/SysUserPasswdRuleApi.java @@ -0,0 +1,14 @@ +package xtools.app.sys.api; + +/** + *
Title : SysUserPasswdRuleApi
+ *Description : 用户名密码规则 Api
+ *Company : org.xujun
+ * + * @author : xujun + * @version : 1.0.0 + * @date : 2026-06-03 16:26:10 + */ +public interface SysUserPasswdRuleApi { + +} diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/controller/SysUserController.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/controller/SysUserController.java index 8d17ef5..7d270c1 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/controller/SysUserController.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/controller/SysUserController.java @@ -109,6 +109,23 @@ public class SysUserController { return sysUserService.delById(req.getIdList()); } + /** + * 重置密码 + * + * @param id 用户ID + * @return 重置密码结果 + */ + @Operation(summary = "重置密码") + @PostMapping("reset-passwd/{id}") + public ResultTitle : SysUserPasswdRuleController
+ *Description : 用户名密码规则 Controller
+ *Company : org.xujun
+ * + * @author : xujun + * @version : 1.0.0 + * @date : 2026-06-03 16:26:10 + */ +@RequiredArgsConstructor +@Tag(name = "用户名密码规则") +@RestController +@RequestMapping("/sys/user-passwd-rule") +public class SysUserPasswdRuleController implements SysUserPasswdRuleApi { + + private final SysUserPasswdRuleService sysUserPasswdRuleService; + + @Operation(summary = "分页请求") + @PostMapping("page") + public ResultTitle : SysUserPasswdRuleConvert
+ *Description : 用户名密码规则 Convert
+ *Company : org.xujun
+ * + * @author : xujun + * @version : 1.0.0 + * @date : 2026-06-03 16:26:10 + */ +@Mapper(componentModel = "spring") +public interface SysUserPasswdRuleConvert { + + /** + * 添加请求转实体 + * + * @param req 添加请求 + * @return 实体 + */ + SysUserPasswdRule addReqToEntity(SysUserPasswdRuleAddReq req); + + /** + * 修改请求转实体 + * + * @param req 修改请求 + * @return 实体 + */ + SysUserPasswdRule updateReqToEntity(SysUserPasswdRuleUpdateReq req); + + /** + * 实体转响应 + * + * @param data 实体 + * @return 响应 + */ + SysUserPasswdRuleResp entityToResp(SysUserPasswdRule data); + + /** + * 批量实体转响应 + * + * @param dataList 批量实体 + * @return 响应 + */ + ListTitle : SysUserJob
+ *Description : SysUserJob
+ *DevelopTools : Idea_x64_v2026.1
+ *DevelopSystem : macOS Sequoia 15.7.5
+ *Company : org.xujun
+ * + * @author : XuJun + * @version : 1.0.0 + * @date : 2026/3/17 21:24 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class SysUserJob extends BaseJob { + + private final SysUserService sysUserService; + + /** + * 运行作业 + */ + @Override + public void runJob() { + sysUserService.cleanSysUserJob(); + } + +} diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/mapper/SysUserPasswdRuleMapper.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/mapper/SysUserPasswdRuleMapper.java new file mode 100644 index 0000000..c5a4463 --- /dev/null +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/mapper/SysUserPasswdRuleMapper.java @@ -0,0 +1,19 @@ +package xtools.app.sys.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import xtools.app.sys.model.entity.SysUserPasswdRule; + +/** + *Title : SysUserPasswdRuleMapper
+ *Description : 用户名密码规则 Mapper 接口
+ *Company : org.xujun
+ * + * @author : xujun + * @version : 1.0.0 + * @date : 2026-06-03 16:26:10 + */ +@Mapper +public interface SysUserPasswdRuleMapper extends BaseMapperTitle : SysUserPasswdRuleExcel
+ *Description : 用户名密码规则Excel对象
+ *Company : org.xujun
+ * + * @author : xujun + * @version : 1.0.0 + * @date : 2026-06-03 16:26:10 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SysUserPasswdRuleExcel implements Serializable { + + /** + * 规则名称 + */ + @ExcelProperty("规则名称") + private String ruleName; + + /** + * 规则描述 + */ + @ExcelProperty("规则描述") + private String ruleDesc; + + /** + * 规则编码 + */ + @ExcelProperty("规则编码") + private String ruleCode; + + /** + * 最小密码长度 + */ + @ExcelProperty("最小密码长度") + private Integer passwdMinLength; + + /** + * 最大密码长度 + */ + @ExcelProperty("最大密码长度") + private Integer passwdMaxLength; + + /** + * 最少数字字符个数 + */ + @ExcelProperty("最少数字字符个数") + private Integer minNumCount; + + /** + * 最少特殊字符个数 + */ + @ExcelProperty("最少特殊字符个数") + private Integer minSpecCount; + + /** + * 最少小写字母个数 + */ + @ExcelProperty("最少小写字母个数") + private Integer minLowerCount; + + /** + * 最少大写字母个数 + */ + @ExcelProperty("最少大写字母个数") + private Integer minUpperCount; + + /** + * 禁止使用历史最近多少次口令 + */ + @ExcelProperty("禁止使用历史最近多少次口令") + private Integer hisPasswdCount; + + /** + * 禁止使用键盘连续3个字符 + */ + @ExcelProperty("禁止使用键盘连续3个字符") + private Integer continuousCheck; + + /** + * 禁止使用弱口令字典中的口令 + */ + @ExcelProperty("禁止使用弱口令字典中的口令") + private Integer invalidCheck; + + /** + * 禁止账号名在密码中所占长度超过一半 + */ + @ExcelProperty("禁止账号名在密码中所占长度超过一半") + private Integer coverHalfCheck; + + /** + * 密码有效期天数 + */ + @ExcelProperty("密码有效期天数") + private Integer validityDays; + + /** + * 密码修改后剩余多少天进行提示 + */ + @ExcelProperty("密码修改后剩余多少天进行提示") + private Integer residueTipsDays; + + /** + * 账号锁定后多久没启用进行账号注销 + */ + @ExcelProperty("账号锁定后多久没启用进行账号注销") + private Integer lockCancelDays; + + /** + * 密码错误时间窗口 + */ + @ExcelProperty("密码错误时间窗口") + private Integer errorPasswdWindowMinutes; + + /** + * 错误密码次数 + */ + @ExcelProperty("错误密码次数") + private Integer errorPasswdCount; + + /** + * 账号锁定分钟数 + */ + @ExcelProperty("账号锁定分钟数") + private Integer errorPasswdLockMinutes; + + /** + * 账号有效期,默认值为90天 + */ + @ExcelProperty("账号有效期") + private Integer accountValidityDays; + + /** + * 账号有效期剩余天数提示,默认值为15天 + */ + @ExcelProperty("账号有效期剩余天数提示") + private Integer accountTipsDays; + + /** + * 备注 + */ + @ExcelProperty("备注") + private String memo; + +} \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/req/SysUserAddReq.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/req/SysUserAddReq.java index 93c071c..fc6e5ba 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/req/SysUserAddReq.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/req/SysUserAddReq.java @@ -6,6 +6,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; +import java.time.Instant; /** *Title : SysUserAddReq
@@ -69,6 +70,12 @@ public class SysUserAddReq implements Serializable { @Schema(description = "状态", example = "1") private Integer status; + /** + * 账号失效时间,空则不失效 + */ + @Schema(description = "账号失效时间,空则不失效") + private Instant accountExpirationTime; + /** * 创建人 ID */ diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/req/SysUserPasswdRuleAddReq.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/req/SysUserPasswdRuleAddReq.java new file mode 100644 index 0000000..03ee9d0 --- /dev/null +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/req/SysUserPasswdRuleAddReq.java @@ -0,0 +1,174 @@ +package xtools.app.sys.model.dto.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + *Title : SysUserPasswdRuleAddReq
+ *Description : 用户名密码规则添加请求对象
+ *Company : org.xujun
+ * + * @author : xujun + * @version : 1.0.0 + * @date : 2026-06-03 16:26:10 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SysUserPasswdRuleAddReq implements Serializable { + + /** + * 规则名称 + */ + @Schema(description = "规则名称") + private String ruleName; + + /** + * 规则描述 + */ + @Schema(description = "规则描述") + private String ruleDesc; + + /** + * 规则编码 + */ + @Schema(description = "规则编码") + private String ruleCode; + + /** + * 默认规则 + */ + @Schema(description = "默认规则") + private Integer ruleDefault; + + /** + * 最小密码长度 + */ + @Schema(description = "最小密码长度") + private Integer passwdMinLength; + + /** + * 最大密码长度 + */ + @Schema(description = "最大密码长度") + private Integer passwdMaxLength; + + /** + * 最少数字字符个数 + */ + @Schema(description = "最少数字字符个数") + private Integer minNumCount; + + /** + * 最少特殊字符个数 + */ + @Schema(description = "最少特殊字符个数") + private Integer minSpecCount; + + /** + * 最少小写字母个数 + */ + @Schema(description = "最少小写字母个数") + private Integer minLowerCount; + + /** + * 最少大写字母个数 + */ + @Schema(description = "最少大写字母个数") + private Integer minUpperCount; + + /** + * 禁止使用历史最近多少次口令 + */ + @Schema(description = "禁止使用历史最近多少次口令") + private Integer hisPasswdCount; + + /** + * 禁止使用键盘连续3个字符 + */ + @Schema(description = "禁止使用键盘连续3个字符") + private Integer continuousCheck; + + /** + * 禁止使用弱口令字典中的口令 + */ + @Schema(description = "禁止使用弱口令字典中的口令") + private Integer invalidCheck; + + /** + * 禁止账号名在密码中所占长度超过一半 + */ + @Schema(description = "禁止账号名在密码中所占长度超过一半") + private Integer coverHalfCheck; + + /** + * 密码有效期天数 + */ + @Schema(description = "密码有效期天数") + private Integer validityDays; + + /** + * 密码修改后剩余多少天进行提示 + */ + @Schema(description = "密码修改后剩余多少天进行提示") + private Integer residueTipsDays; + + /** + * 账号锁定后多久没启用进行账号注销 + */ + @Schema(description = "账号锁定后多久没启用进行账号注销") + private Integer lockCancelDays; + + /** + * 密码错误时间窗口 + */ + @Schema(description = "密码错误时间窗口") + private Integer errorPasswdWindowMinutes; + + /** + * 错误密码次数 + */ + @Schema(description = "错误密码次数") + private Integer errorPasswdCount; + + /** + * 账号锁定分钟数 + */ + @Schema(description = "账号锁定分钟数") + private Integer errorPasswdLockMinutes; + + /** + * 账号有效期,默认值为90天 + */ + @Schema(description = "账号有效期,默认值为90天") + private Integer accountValidityDays; + + /** + * 账号有效期剩余天数提示,默认值为15天 + */ + @Schema(description = "账号有效期剩余天数提示,默认值为15天") + private Integer accountTipsDays; + + /** + * 创建人 ID + */ + @Schema(description = "创建人 ID") + private Long createBy; + + /** + * 修改人 ID + */ + @Schema(description = "修改人 ID") + private Long updateBy; + + /** + * 备注 + */ + @Schema(description = "备注") + private String memo; + +} \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/req/SysUserPasswdRulePageReq.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/req/SysUserPasswdRulePageReq.java new file mode 100644 index 0000000..b296d08 --- /dev/null +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/req/SysUserPasswdRulePageReq.java @@ -0,0 +1,192 @@ +package xtools.app.sys.model.dto.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.Instant; + +/** + *Title : SysUserPasswdRulePageReq
+ *Description : 用户名密码规则分页请求对象
+ *Company : org.xujun
+ * + * @author : xujun + * @version : 1.0.0 + * @date : 2026-06-03 16:26:10 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SysUserPasswdRulePageReq implements Serializable { + + /** + * 规则主键id + */ + @Schema(description = "规则主键id") + private Long id; + + /** + * 规则名称 + */ + @Schema(description = "规则名称") + private String ruleName; + + /** + * 规则描述 + */ + @Schema(description = "规则描述") + private String ruleDesc; + + /** + * 规则编码 + */ + @Schema(description = "规则编码") + private String ruleCode; + + /** + * 默认规则 + */ + @Schema(description = "默认规则") + private Integer ruleDefault; + + /** + * 最小密码长度 + */ + @Schema(description = "最小密码长度") + private Integer passwdMinLength; + + /** + * 最大密码长度 + */ + @Schema(description = "最大密码长度") + private Integer passwdMaxLength; + + /** + * 最少数字字符个数 + */ + @Schema(description = "最少数字字符个数") + private Integer minNumCount; + + /** + * 最少特殊字符个数 + */ + @Schema(description = "最少特殊字符个数") + private Integer minSpecCount; + + /** + * 最少小写字母个数 + */ + @Schema(description = "最少小写字母个数") + private Integer minLowerCount; + + /** + * 最少大写字母个数 + */ + @Schema(description = "最少大写字母个数") + private Integer minUpperCount; + + /** + * 禁止使用历史最近多少次口令 + */ + @Schema(description = "禁止使用历史最近多少次口令") + private Integer hisPasswdCount; + + /** + * 禁止使用键盘连续3个字符 + */ + @Schema(description = "禁止使用键盘连续3个字符") + private Integer continuousCheck; + + /** + * 禁止使用弱口令字典中的口令 + */ + @Schema(description = "禁止使用弱口令字典中的口令") + private Integer invalidCheck; + + /** + * 禁止账号名在密码中所占长度超过一半 + */ + @Schema(description = "禁止账号名在密码中所占长度超过一半") + private Integer coverHalfCheck; + + /** + * 密码有效期天数 + */ + @Schema(description = "密码有效期天数") + private Integer validityDays; + + /** + * 密码修改后剩余多少天进行提示 + */ + @Schema(description = "密码修改后剩余多少天进行提示") + private Integer residueTipsDays; + + /** + * 账号锁定后多久没启用进行账号注销 + */ + @Schema(description = "账号锁定后多久没启用进行账号注销") + private Integer lockCancelDays; + + /** + * 密码错误时间窗口 + */ + @Schema(description = "密码错误时间窗口") + private Integer errorPasswdWindowMinutes; + + /** + * 错误密码次数 + */ + @Schema(description = "错误密码次数") + private Integer errorPasswdCount; + + /** + * 账号锁定分钟数 + */ + @Schema(description = "账号锁定分钟数") + private Integer errorPasswdLockMinutes; + + /** + * 账号有效期,默认值为90天 + */ + @Schema(description = "账号有效期,默认值为90天") + private Integer accountValidityDays; + + /** + * 账号有效期剩余天数提示,默认值为15天 + */ + @Schema(description = "账号有效期剩余天数提示,默认值为15天") + private Integer accountTipsDays; + + /** + * 创建人 ID + */ + @Schema(description = "创建人 ID") + private Long createBy; + + /** + * 修改人 ID + */ + @Schema(description = "修改人 ID") + private Long updateBy; + + /** + * 备注 + */ + @Schema(description = "备注") + private String memo; + + /** + * 创建时间(范围) + */ + @Schema(description = "创建时间(范围)", example = "['2026-01-01 00:00:00', '2026-01-01 12:00:00']") + private Instant[] gmtCreateRange; + + /** + * 更新时间(范围) + */ + @Schema(description = "更新时间(范围)", example = "['2026-01-01 00:00:00', '2026-01-01 12:00:00']") + private Instant[] gmtModifiedRange; +} \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/req/SysUserPasswdRuleUpdateReq.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/req/SysUserPasswdRuleUpdateReq.java new file mode 100644 index 0000000..16b9a73 --- /dev/null +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/req/SysUserPasswdRuleUpdateReq.java @@ -0,0 +1,180 @@ +package xtools.app.sys.model.dto.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + *Title : SysUserPasswdRuleUpdateReq
+ *Description : 用户名密码规则更新请求对象
+ *Company : org.xujun
+ * + * @author : xujun + * @version : 1.0.0 + * @date : 2026-06-03 16:26:10 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SysUserPasswdRuleUpdateReq implements Serializable { + + /** + * 规则主键id + */ + @Schema(description = "规则主键id") + private Long id; + + /** + * 规则名称 + */ + @Schema(description = "规则名称") + private String ruleName; + + /** + * 规则描述 + */ + @Schema(description = "规则描述") + private String ruleDesc; + + /** + * 规则编码 + */ + @Schema(description = "规则编码") + private String ruleCode; + + /** + * 默认规则 + */ + @Schema(description = "默认规则") + private Integer ruleDefault; + + /** + * 最小密码长度 + */ + @Schema(description = "最小密码长度") + private Integer passwdMinLength; + + /** + * 最大密码长度 + */ + @Schema(description = "最大密码长度") + private Integer passwdMaxLength; + + /** + * 最少数字字符个数 + */ + @Schema(description = "最少数字字符个数") + private Integer minNumCount; + + /** + * 最少特殊字符个数 + */ + @Schema(description = "最少特殊字符个数") + private Integer minSpecCount; + + /** + * 最少小写字母个数 + */ + @Schema(description = "最少小写字母个数") + private Integer minLowerCount; + + /** + * 最少大写字母个数 + */ + @Schema(description = "最少大写字母个数") + private Integer minUpperCount; + + /** + * 禁止使用历史最近多少次口令 + */ + @Schema(description = "禁止使用历史最近多少次口令") + private Integer hisPasswdCount; + + /** + * 禁止使用键盘连续3个字符 + */ + @Schema(description = "禁止使用键盘连续3个字符") + private Integer continuousCheck; + + /** + * 禁止使用弱口令字典中的口令 + */ + @Schema(description = "禁止使用弱口令字典中的口令") + private Integer invalidCheck; + + /** + * 禁止账号名在密码中所占长度超过一半 + */ + @Schema(description = "禁止账号名在密码中所占长度超过一半") + private Integer coverHalfCheck; + + /** + * 密码有效期天数 + */ + @Schema(description = "密码有效期天数") + private Integer validityDays; + + /** + * 密码修改后剩余多少天进行提示 + */ + @Schema(description = "密码修改后剩余多少天进行提示") + private Integer residueTipsDays; + + /** + * 账号锁定后多久没启用进行账号注销 + */ + @Schema(description = "账号锁定后多久没启用进行账号注销") + private Integer lockCancelDays; + + /** + * 密码错误时间窗口 + */ + @Schema(description = "密码错误时间窗口") + private Integer errorPasswdWindowMinutes; + + /** + * 错误密码次数 + */ + @Schema(description = "错误密码次数") + private Integer errorPasswdCount; + + /** + * 账号锁定分钟数 + */ + @Schema(description = "账号锁定分钟数") + private Integer errorPasswdLockMinutes; + + /** + * 账号有效期,默认值为90天 + */ + @Schema(description = "账号有效期,默认值为90天") + private Integer accountValidityDays; + + /** + * 账号有效期剩余天数提示,默认值为15天 + */ + @Schema(description = "账号有效期剩余天数提示,默认值为15天") + private Integer accountTipsDays; + + /** + * 创建人 ID + */ + @Schema(description = "创建人 ID") + private Long createBy; + + /** + * 修改人 ID + */ + @Schema(description = "修改人 ID") + private Long updateBy; + + /** + * 备注 + */ + @Schema(description = "备注") + private String memo; + +} \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/req/SysUserUpdateReq.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/req/SysUserUpdateReq.java index 154f323..c935c18 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/req/SysUserUpdateReq.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/req/SysUserUpdateReq.java @@ -6,6 +6,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; +import java.time.Instant; /** *Title : SysUserUpdateReq
@@ -75,6 +76,12 @@ public class SysUserUpdateReq implements Serializable { @Schema(description = "状态", example = "1") private Integer status; + /** + * 账号失效时间,空则不失效 + */ + @Schema(description = "账号失效时间,空则不失效") + private Instant accountExpirationTime; + /** * 创建人 ID */ diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/resp/SysBaseUserInfoResp.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/resp/SysBaseUserInfoResp.java index 6d7b127..834d95f 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/resp/SysBaseUserInfoResp.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/resp/SysBaseUserInfoResp.java @@ -47,4 +47,10 @@ public class SysBaseUserInfoResp implements Serializable { */ @Schema(description = "按钮权限") private ListTitle : SysUserPasswdRuleResp
+ *Description : 用户名密码规则响应对象
+ *Company : org.xujun
+ * + * @author : xujun + * @version : 1.0.0 + * @date : 2026-06-03 16:26:10 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class SysUserPasswdRuleResp extends BaseEntity { + + /** + * 规则主键id + */ + @Schema(description = "规则主键id") + private Long id; + + /** + * 规则名称 + */ + @Schema(description = "规则名称") + private String ruleName; + + /** + * 规则描述 + */ + @Schema(description = "规则描述") + private String ruleDesc; + + /** + * 规则编码 + */ + @Schema(description = "规则编码") + private String ruleCode; + + /** + * 默认规则 + */ + @Schema(description = "默认规则") + private Integer ruleDefault; + + /** + * 最小密码长度 + */ + @Schema(description = "最小密码长度") + private Integer passwdMinLength; + + /** + * 最大密码长度 + */ + @Schema(description = "最大密码长度") + private Integer passwdMaxLength; + + /** + * 最少数字字符个数 + */ + @Schema(description = "最少数字字符个数") + private Integer minNumCount; + + /** + * 最少特殊字符个数 + */ + @Schema(description = "最少特殊字符个数") + private Integer minSpecCount; + + /** + * 最少小写字母个数 + */ + @Schema(description = "最少小写字母个数") + private Integer minLowerCount; + + /** + * 最少大写字母个数 + */ + @Schema(description = "最少大写字母个数") + private Integer minUpperCount; + + /** + * 禁止使用历史最近多少次口令 + */ + @Schema(description = "禁止使用历史最近多少次口令") + private Integer hisPasswdCount; + + /** + * 禁止使用键盘连续3个字符 + */ + @Schema(description = "禁止使用键盘连续3个字符") + private Integer continuousCheck; + + /** + * 禁止使用弱口令字典中的口令 + */ + @Schema(description = "禁止使用弱口令字典中的口令") + private Integer invalidCheck; + + /** + * 禁止账号名在密码中所占长度超过一半 + */ + @Schema(description = "禁止账号名在密码中所占长度超过一半") + private Integer coverHalfCheck; + + /** + * 密码有效期天数 + */ + @Schema(description = "密码有效期天数") + private Integer validityDays; + + /** + * 密码修改后剩余多少天进行提示 + */ + @Schema(description = "密码修改后剩余多少天进行提示") + private Integer residueTipsDays; + + /** + * 账号锁定后多久没启用进行账号注销 + */ + @Schema(description = "账号锁定后多久没启用进行账号注销") + private Integer lockCancelDays; + + /** + * 密码错误时间窗口 + */ + @Schema(description = "密码错误时间窗口") + private Integer errorPasswdWindowMinutes; + + /** + * 错误密码次数 + */ + @Schema(description = "错误密码次数") + private Integer errorPasswdCount; + + /** + * 账号锁定分钟数 + */ + @Schema(description = "账号锁定分钟数") + private Integer errorPasswdLockMinutes; + + /** + * 账号有效期,默认值为90天 + */ + @Schema(description = "账号有效期,默认值为90天") + private Integer accountValidityDays; + + /** + * 账号有效期剩余天数提示,默认值为15天 + */ + @Schema(description = "账号有效期剩余天数提示,默认值为15天") + private Integer accountTipsDays; + + /** + * 创建人 ID + */ + @Schema(description = "创建人 ID") + private Long createBy; + + /** + * 修改人 ID + */ + @Schema(description = "修改人 ID") + private Long updateBy; + + /** + * 备注 + */ + @Schema(description = "备注") + private String memo; + +} \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/resp/SysUserResp.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/resp/SysUserResp.java index 29c2fdd..380208f 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/resp/SysUserResp.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/dto/resp/SysUserResp.java @@ -9,6 +9,7 @@ import xtools.boot.api.model.entity.BaseEntity; import xtools.boot.mask.anntation.Mask; import xtools.boot.mask.enums.MaskType; +import java.time.Instant; import java.util.List; /** @@ -62,7 +63,7 @@ public class SysUserResp extends BaseEntity { * 手机号 */ @Schema(description = "手机号", example = "13800138000") - @Mask(value = MaskType.MOBILE_PHONE, always = true) + @Mask(value = MaskType.MOBILE_PHONE) private String mobile; /** @@ -78,13 +79,6 @@ public class SysUserResp extends BaseEntity { @Schema(description = "性别", example = "1") private Integer sex; - /** - * 密码 - */ - @Schema(description = "密码", example = "******") - @Mask(MaskType.PASSWORD) - private String passwd; - /** * 状态 */ @@ -92,16 +86,10 @@ public class SysUserResp extends BaseEntity { private Integer status; /** - * 创建人 ID + * 账号失效时间,空则不失效 */ - @Schema(description = "创建人 ID", example = "1") - private Long createBy; - - /** - * 修改人 ID - */ - @Schema(description = "修改人 ID", example = "1") - private Long updateBy; + @Schema(description = "账号失效时间,空则不失效") + private Instant accountExpirationTime; /** * 备注 diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysAddress.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysAddress.java index 0455027..81864fd 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysAddress.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysAddress.java @@ -1,5 +1,6 @@ package xtools.app.sys.model.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -80,7 +81,7 @@ public class SysAddress extends BaseEntity { * 公用地址-备注 */ @Schema(description = "公用地址-备注") - @TableField(value = "memo") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) private String memo; } \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysDept.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysDept.java index c37588d..be12790 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysDept.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysDept.java @@ -1,5 +1,6 @@ package xtools.app.sys.model.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -94,6 +95,6 @@ public class SysDept extends BaseEntity { * 备注 */ @Schema(description = "备注") - @TableField(value = "memo") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) private String memo; } \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysDict.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysDict.java index c923d7f..82b46da 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysDict.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysDict.java @@ -1,5 +1,6 @@ package xtools.app.sys.model.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -73,6 +74,6 @@ public class SysDict extends BaseEntity { * 备注 */ @Schema(description = "备注") - @TableField(value = "memo") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) private String memo; } \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysDictItem.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysDictItem.java index 3d9bb45..d4d0b66 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysDictItem.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysDictItem.java @@ -1,5 +1,6 @@ package xtools.app.sys.model.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -94,6 +95,6 @@ public class SysDictItem extends BaseEntity { * 备注 */ @Schema(description = "备注") - @TableField(value = "memo") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) private String memo; } \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysFile.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysFile.java index abd97c7..c8a34b5 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysFile.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysFile.java @@ -1,5 +1,6 @@ package xtools.app.sys.model.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -152,7 +153,7 @@ public class SysFile extends BaseEntity { * 备注 */ @Schema(description = "备注") - @TableField(value = "memo") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) private String memo; } \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysLog.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysLog.java index 0731b10..2c322f9 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysLog.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysLog.java @@ -1,5 +1,6 @@ package xtools.app.sys.model.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -157,6 +158,6 @@ public class SysLog extends BaseEntity { * 备注 */ @Schema(description = "备注") - @TableField(value = "memo") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) private String memo; } \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysMenu.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysMenu.java index 54a2b99..da286e1 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysMenu.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysMenu.java @@ -1,5 +1,6 @@ package xtools.app.sys.model.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -164,6 +165,6 @@ public class SysMenu extends BaseEntity { * 备注 */ @Schema(description = "备注") - @TableField(value = "memo") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) private String memo; } \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysNotice.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysNotice.java index ff8c369..df42ecb 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysNotice.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysNotice.java @@ -1,5 +1,6 @@ package xtools.app.sys.model.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -131,7 +132,7 @@ public class SysNotice extends BaseEntity { * 备注 */ @Schema(description = "备注") - @TableField(value = "memo") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) private String memo; } \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysOptLog.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysOptLog.java index e725b55..d2f4487 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysOptLog.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysOptLog.java @@ -1,5 +1,6 @@ package xtools.app.sys.model.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -94,7 +95,7 @@ public class SysOptLog implements Serializable { * 备注 */ @Schema(description = "备注") - @TableField(value = "memo") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) private String memo; /** diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysParam.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysParam.java index 1bcff71..f12b4b4 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysParam.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysParam.java @@ -1,5 +1,6 @@ package xtools.app.sys.model.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -73,7 +74,7 @@ public class SysParam extends BaseEntity { * 备注 */ @Schema(description = "备注") - @TableField(value = "memo") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) private String memo; } \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysRisk.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysRisk.java index dd243c9..f654e0d 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysRisk.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysRisk.java @@ -1,5 +1,6 @@ package xtools.app.sys.model.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -73,7 +74,7 @@ public class SysRisk extends BaseEntity { * 备注 */ @Schema(description = "备注") - @TableField(value = "memo") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) private String memo; } \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysRole.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysRole.java index 2cdfa94..fce2ed3 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysRole.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysRole.java @@ -1,5 +1,6 @@ package xtools.app.sys.model.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -87,6 +88,6 @@ public class SysRole extends BaseEntity { * 备注 */ @Schema(description = "备注") - @TableField(value = "memo") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) private String memo; } \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysRoleMenu.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysRoleMenu.java index 482c162..e8c9752 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysRoleMenu.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysRoleMenu.java @@ -1,5 +1,6 @@ package xtools.app.sys.model.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -52,6 +53,6 @@ public class SysRoleMenu extends BaseEntity { * 备注 */ @Schema(description = "备注") - @TableField(value = "memo") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) private String memo; } \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysTask.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysTask.java index 4612b85..28be804 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysTask.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysTask.java @@ -1,5 +1,6 @@ package xtools.app.sys.model.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -89,6 +90,6 @@ public class SysTask extends BaseEntity { * 备注 */ @Schema(description = "备注") - @TableField(value = "memo") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) private String memo; } \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUpdateHistory.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUpdateHistory.java index 231d20b..535c9b0 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUpdateHistory.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUpdateHistory.java @@ -1,5 +1,6 @@ package xtools.app.sys.model.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -66,6 +67,6 @@ public class SysUpdateHistory extends BaseEntity { * 备注 */ @Schema(description = "备注") - @TableField(value = "memo") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) private String memo; } \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUser.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUser.java index 1c22fef..f6ff8a4 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUser.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUser.java @@ -1,5 +1,6 @@ package xtools.app.sys.model.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -11,6 +12,8 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import xtools.boot.api.model.entity.BaseEntity; +import java.time.Instant; + /** *Title : SysUser
*Description : 系统用户表实体对象
@@ -97,6 +100,34 @@ public class SysUser extends BaseEntity { @TableField(value = "status") private Integer status; + /** + * 历史密码 + */ + @Schema(description = "历史密码") + @TableField(value = "history_passwd") + private String historyPasswd; + + /** + * 密码修改时间 + */ + @Schema(description = "密码修改时间") + @TableField(value = "passwd_gmt_modified") + private Instant passwdGmtModified; + + /** + * 账号失效时间,空则不失效 + */ + @Schema(description = "账号失效时间,空则不失效") + @TableField(value = "account_expiration_time", updateStrategy = FieldStrategy.ALWAYS) + private Instant accountExpirationTime; + + /** + * 账号禁用时间 + */ + @Schema(description = "账号禁用时间") + @TableField(value = "account_disabled_time", updateStrategy = FieldStrategy.ALWAYS) + private Instant accountDisabledTime; + /** * 创建人 ID */ @@ -115,6 +146,6 @@ public class SysUser extends BaseEntity { * 备注 */ @Schema(description = "备注") - @TableField(value = "memo") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) private String memo; } \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUserNotice.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUserNotice.java index c4abf76..f6728d2 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUserNotice.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUserNotice.java @@ -1,5 +1,6 @@ package xtools.app.sys.model.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -75,7 +76,7 @@ public class SysUserNotice extends BaseEntity { * 备注 */ @Schema(description = "备注") - @TableField(value = "memo") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) private String memo; } \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUserPasswdRule.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUserPasswdRule.java new file mode 100644 index 0000000..618b4ce --- /dev/null +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUserPasswdRule.java @@ -0,0 +1,213 @@ +package xtools.app.sys.model.entity; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import xtools.boot.api.model.entity.BaseEntity; + +/** + *Title : SysUserPasswdRule
+ *Description : 用户名密码规则实体对象
+ *Company : org.xujun
+ * + * @author : xujun + * @version : 1.0.0 + * @date : 2026-06-03 16:26:10 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +@TableName("sys_user_passwd_rule") +public class SysUserPasswdRule extends BaseEntity { + + /** + * 规则主键id + */ + @Schema(description = "规则主键id") + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 规则名称 + */ + @Schema(description = "规则名称") + @TableField(value = "rule_name") + private String ruleName; + + /** + * 规则描述 + */ + @Schema(description = "规则描述") + @TableField(value = "rule_desc", updateStrategy = FieldStrategy.ALWAYS) + private String ruleDesc; + + /** + * 规则编码 + */ + @Schema(description = "规则编码") + @TableField(value = "rule_code") + private String ruleCode; + + /** + * 默认规则 + */ + @Schema(description = "默认规则") + @TableField(value = "rule_default") + private Integer ruleDefault; + + /** + * 最小密码长度 + */ + @Schema(description = "最小密码长度") + @TableField(value = "passwd_min_length") + private Integer passwdMinLength; + + /** + * 最大密码长度 + */ + @Schema(description = "最大密码长度") + @TableField(value = "passwd_max_length") + private Integer passwdMaxLength; + + /** + * 最少数字字符个数 + */ + @Schema(description = "最少数字字符个数") + @TableField(value = "min_num_count") + private Integer minNumCount; + + /** + * 最少特殊字符个数 + */ + @Schema(description = "最少特殊字符个数") + @TableField(value = "min_spec_count") + private Integer minSpecCount; + + /** + * 最少小写字母个数 + */ + @Schema(description = "最少小写字母个数") + @TableField(value = "min_lower_count") + private Integer minLowerCount; + + /** + * 最少大写字母个数 + */ + @Schema(description = "最少大写字母个数") + @TableField(value = "min_upper_count") + private Integer minUpperCount; + + /** + * 禁止使用历史最近多少次口令 + */ + @Schema(description = "禁止使用历史最近多少次口令") + @TableField(value = "his_passwd_count") + private Integer hisPasswdCount; + + /** + * 禁止使用键盘连续3个字符 + */ + @Schema(description = "禁止使用键盘连续3个字符") + @TableField(value = "continuous_check") + private Integer continuousCheck; + + /** + * 禁止使用弱口令字典中的口令 + */ + @Schema(description = "禁止使用弱口令字典中的口令") + @TableField(value = "invalid_check") + private Integer invalidCheck; + + /** + * 禁止账号名在密码中所占长度超过一半 + */ + @Schema(description = "禁止账号名在密码中所占长度超过一半") + @TableField(value = "cover_half_check") + private Integer coverHalfCheck; + + /** + * 密码有效期天数 + */ + @Schema(description = "密码有效期天数") + @TableField(value = "validity_days") + private Integer validityDays; + + /** + * 密码修改后剩余多少天进行提示 + */ + @Schema(description = "密码修改后剩余多少天进行提示") + @TableField(value = "residue_tips_days") + private Integer residueTipsDays; + + /** + * 账号锁定后多久没启用进行账号注销 + */ + @Schema(description = "账号锁定后多久没启用进行账号注销") + @TableField(value = "lock_cancel_days") + private Integer lockCancelDays; + + /** + * 密码错误时间窗口 + */ + @Schema(description = "密码错误时间窗口") + @TableField(value = "error_passwd_window_minutes") + private Integer errorPasswdWindowMinutes; + + /** + * 错误密码次数 + */ + @Schema(description = "错误密码次数") + @TableField(value = "error_passwd_count") + private Integer errorPasswdCount; + + /** + * 账号锁定分钟数 + */ + @Schema(description = "账号锁定分钟数") + @TableField(value = "error_passwd_lock_minutes") + private Integer errorPasswdLockMinutes; + + /** + * 账号有效期,默认值为90天 + */ + @Schema(description = "账号有效期,默认值为90天") + @TableField(value = "account_validity_days") + private Integer accountValidityDays; + + /** + * 账号有效期剩余天数提示,默认值为15天 + */ + @Schema(description = "账号有效期剩余天数提示,默认值为15天") + @TableField(value = "account_tips_days") + private Integer accountTipsDays; + + /** + * 创建人 ID + */ + @Schema(description = "创建人 ID") + @TableField(value = "create_by") + private Long createBy; + + /** + * 修改人 ID + */ + @Schema(description = "修改人 ID") + @TableField(value = "update_by") + private Long updateBy; + + /** + * 备注 + */ + @Schema(description = "备注") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) + private String memo; + +} \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUserRole.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUserRole.java index fcb50a8..6427ee5 100644 --- a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUserRole.java +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/model/entity/SysUserRole.java @@ -1,5 +1,6 @@ package xtools.app.sys.model.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -52,6 +53,6 @@ public class SysUserRole extends BaseEntity { * 备注 */ @Schema(description = "备注") - @TableField(value = "memo") + @TableField(value = "memo", updateStrategy = FieldStrategy.ALWAYS) private String memo; } \ No newline at end of file diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/service/SysPasswdService.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/service/SysPasswdService.java new file mode 100644 index 0000000..5c05ee5 --- /dev/null +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/service/SysPasswdService.java @@ -0,0 +1,43 @@ +package xtools.app.sys.service; + +import xtools.app.sys.model.entity.SysUserPasswdRule; + +/** + *Title : SysPasswdService
+ *Description : SysPasswdService
+ *DevelopTools : Idea_x64_v2026.1
+ *DevelopSystem : macOS Sequoia 15.7.5
+ *Company : org.xujun
+ * + * @author : XuJun + * @version : 1.0.0 + * @date : 2026/6/4 09:32 + */ +public interface SysPasswdService { + + /** + * 检查密码 + * + * @param passwd 密码 + * @param account 账号 + */ + void checkPasswd(String passwd, String account); + + /** + * 检查密码 + * + * @param passwd 密码 + * @param account 账号 + * @param ruleCode 规则码 + */ + void checkPasswd(String passwd, String account, String ruleCode); + + /** + * 检查密码 + * + * @param passwd 密码 + * @param account 账号 + * @param rule 规则 + */ + void checkPasswd(String passwd, String account, SysUserPasswdRule rule); +} diff --git a/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/service/SysUserPasswdRuleService.java b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/service/SysUserPasswdRuleService.java new file mode 100644 index 0000000..e91b100 --- /dev/null +++ b/xtools-app-sys/xtools-app-sys-biz/src/main/java/xtools/app/sys/service/SysUserPasswdRuleService.java @@ -0,0 +1,99 @@ +package xtools.app.sys.service; + +import xtools.app.sys.api.SysUserPasswdRuleApi; +import xtools.app.sys.model.dto.excel.SysUserPasswdRuleExcel; +import xtools.app.sys.model.dto.req.SysUserPasswdRuleAddReq; +import xtools.app.sys.model.dto.req.SysUserPasswdRulePageReq; +import xtools.app.sys.model.dto.req.SysUserPasswdRuleUpdateReq; +import xtools.app.sys.model.dto.resp.SysUserPasswdRuleResp; +import xtools.app.sys.model.entity.SysUserPasswdRule; +import xtools.boot.api.model.dto.Result; +import xtools.boot.api.model.dto.page.PageReq; +import xtools.boot.api.model.dto.page.PageResp; +import xtools.boot.api.model.dto.req.IdListReq; + +import java.util.List; + +/** + *Title : SysUserPasswdRuleService
+ *Description : 用户名密码规则 Service
+ *Company : org.xujun
+ * + * @author : xujun + * @version : 1.0.0 + * @date : 2026-06-03 16:26:10 + */ +public interface SysUserPasswdRuleService extends SysUserPasswdRuleApi { + + /** + * 分页查询 + * + * @param pageReq 分页请求 + * @return 分页结果 + */ + ResultTitle : SysUserPasswdRuleBaseService
+ *Description : 用户名密码规则 BaseService
+ *Company : org.xujun
+ * + * @author : xujun + * @version : 1.0.0 + * @date : 2026-06-03 16:26:10 + */ +@Component +public class SysUserPasswdRuleBaseService extends ServiceImplTitle : SysPasswdServiceImpl
+ *Description : SysPasswdServiceImpl
+ *DevelopTools : Idea_x64_v2026.1
+ *DevelopSystem : macOS Sequoia 15.7.5
+ *Company : org.xujun
+ * + * @author : XuJun + * @version : 1.0.0 + * @date : 2026/6/4 09:32 + */ +@Primary +@Service +@RequiredArgsConstructor +public class SysPasswdServiceImpl implements SysPasswdService, BaseParams { + + /** + * 键盘连续字符序列 + */ + private static final String[] KEYBOARD_SEQUENCES = { + "1234567890", + "qwertyuiop", + "asdfghjkl", + "zxcvbnm", + "qwerty", + "asdfgh", + "zxcvbn", + "qazwsx", + "edcrfv", + "tgbyhn", + "ujmik," + }; + /** + * 常见弱口令列表 + */ + private static final SetTitle : SysUserPasswdRuleServiceImpl
+ *Description : 用户名密码规则 ServiceImpl
+ *Company : org.xujun
+ * + * @author : xujun + * @version : 1.0.0 + * @date : 2026-06-03 16:26:10 + */ +@Primary +@Service +@RequiredArgsConstructor +public class SysUserPasswdRuleServiceImpl implements SysUserPasswdRuleService, BaseParams { + + private final static AppCache CACHE_PARAM = AppCache.SYS_CACHE_AP_RULE; + private final SysUserPasswdRuleBaseService sysUserPasswdRuleBaseService; + private final SysUserPasswdRuleConvert sysUserPasswdRuleConvert; + @Resource + private RedisService redisService; + + /** + * 分页查询 + * + * @param pageReq 分页请求 + * @return 分页结果 + */ + @Override + public ResultTitle : SysUserPasswdRuleCall
+ *Description : 用户名密码规则 Call
+ *Company : org.xujun
+ * + * @author : xujun + * @version : 1.0.0 + * @date : 2026-06-03 16:26:10 + */ +@HttpExchange("/sys/user-passwd-rule") +public interface SysUserPasswdRuleCall extends SysUserPasswdRuleApi { + +}