diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/constant/RegExpConsts.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/constant/RegexConsts.java
similarity index 53%
rename from continew-admin-common/src/main/java/top/charles7c/cnadmin/common/constant/RegExpConsts.java
rename to continew-admin-common/src/main/java/top/charles7c/cnadmin/common/constant/RegexConsts.java
index e3e04fb8..89ca0c43 100644
--- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/constant/RegExpConsts.java
+++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/constant/RegexConsts.java
@@ -19,6 +19,8 @@ package top.charles7c.cnadmin.common.constant;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import cn.hutool.core.lang.RegexPool;
+
/**
* 正则相关常量
*
@@ -26,10 +28,25 @@ import lombok.NoArgsConstructor;
* @since 2023/1/10 20:06
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public class RegExpConsts {
+public class RegexConsts implements RegexPool {
/**
- * 密码正则(必须包含字母和数字的组合,可以使用特殊字符,长度在6-32之间)
+ * 用户名正则(长度为 4 到 16 位,可以包含字母、数字,下划线,以字母开头)
+ */
+ public static final String USERNAME = "^[a-zA-Z][a-zA-Z0-9_]{3,15}$";
+
+ /**
+ * 密码正则(长度为 6 到 32 位,可以包含字母、数字、下划线,特殊字符,同时包含字母和数字)
*/
public static final String PASSWORD = "^(?=.*\\d)(?=.*[a-z]).{6,32}$";
+
+ /**
+ * 通用编码正则(长度为 2 到 16 位,可以包含字母、数字,下划线,以字母开头)
+ */
+ public static final String GENERAL_CODE = "^[a-zA-Z][a-zA-Z0-9_]{1,15}$";
+
+ /**
+ * 通用名称正则(长度为 1 到 20 位,可以包含中文、字母、数字、下划线,短横线)
+ */
+ public static final String GENERAL_NAME = "^[\\u4e00-\\u9fa5a-zA-Z0-9_-]{1,20}$";
}
diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/DeptRequest.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/DeptRequest.java
index b18c6385..79255caf 100644
--- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/DeptRequest.java
+++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/DeptRequest.java
@@ -18,6 +18,7 @@ package top.charles7c.cnadmin.system.model.request;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
import lombok.Data;
@@ -26,6 +27,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import org.hibernate.validator.constraints.Length;
import top.charles7c.cnadmin.common.base.BaseRequest;
+import top.charles7c.cnadmin.common.constant.RegexConsts;
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
/**
@@ -52,6 +54,7 @@ public class DeptRequest extends BaseRequest {
*/
@Schema(description = "部门名称")
@NotBlank(message = "部门名称不能为空")
+ @Pattern(regexp = RegexConsts.GENERAL_NAME, message = "部门名称长度为 1 到 20 位,可以包含中文、字母、数字、下划线,短横线")
private String name;
/**
diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/MenuRequest.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/MenuRequest.java
index 86704d72..10f43ab2 100644
--- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/MenuRequest.java
+++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/MenuRequest.java
@@ -18,12 +18,14 @@ package top.charles7c.cnadmin.system.model.request;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
import lombok.Data;
import io.swagger.v3.oas.annotations.media.Schema;
import top.charles7c.cnadmin.common.base.BaseRequest;
+import top.charles7c.cnadmin.common.constant.RegexConsts;
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
import top.charles7c.cnadmin.common.enums.MenuTypeEnum;
@@ -57,6 +59,7 @@ public class MenuRequest extends BaseRequest {
*/
@Schema(description = "菜单标题")
@NotBlank(message = "菜单标题不能为空")
+ @Pattern(regexp = RegexConsts.GENERAL_NAME, message = "菜单标题长度为 1 到 20 位,可以包含中文、字母、数字、下划线,短横线")
private String title;
/**
diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/RoleRequest.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/RoleRequest.java
index 98dae03c..8fb9c590 100644
--- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/RoleRequest.java
+++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/RoleRequest.java
@@ -21,6 +21,7 @@ import java.util.List;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
import lombok.Data;
@@ -29,6 +30,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import org.hibernate.validator.constraints.Length;
import top.charles7c.cnadmin.common.base.BaseRequest;
+import top.charles7c.cnadmin.common.constant.RegexConsts;
import top.charles7c.cnadmin.common.enums.DataScopeEnum;
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
@@ -49,12 +51,15 @@ public class RoleRequest extends BaseRequest {
*/
@Schema(description = "角色名称")
@NotBlank(message = "角色名称不能为空")
+ @Pattern(regexp = RegexConsts.GENERAL_NAME, message = "角色名称长度为 1 到 20 位,可以包含中文、字母、数字、下划线,短横线")
private String name;
/**
* 角色编码
*/
@Schema(description = "角色编码")
+ @NotBlank(message = "角色编码不能为空")
+ @Pattern(regexp = RegexConsts.GENERAL_CODE, message = "角色编码长度为 2 到 16 位,可以包含字母、数字,下划线,以字母开头")
private String code;
/**
diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/UpdateBasicInfoRequest.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/UpdateBasicInfoRequest.java
index 4ad6e00d..1b904666 100644
--- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/UpdateBasicInfoRequest.java
+++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/UpdateBasicInfoRequest.java
@@ -20,13 +20,13 @@ import java.io.Serializable;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
import lombok.Data;
import io.swagger.v3.oas.annotations.media.Schema;
-import org.hibernate.validator.constraints.Length;
-
+import top.charles7c.cnadmin.common.constant.RegexConsts;
import top.charles7c.cnadmin.common.enums.GenderEnum;
/**
@@ -46,7 +46,7 @@ public class UpdateBasicInfoRequest implements Serializable {
*/
@Schema(description = "昵称")
@NotBlank(message = "昵称不能为空")
- @Length(max = 32, message = "昵称长度不能超过 {max} 个字符")
+ @Pattern(regexp = RegexConsts.GENERAL_NAME, message = "昵称长度为 1 到 20 位,可以包含中文、字母、数字、下划线,短横线")
private String nickname;
/**
diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/UpdateEmailRequest.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/UpdateEmailRequest.java
index ee0b1132..5215a604 100644
--- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/UpdateEmailRequest.java
+++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/UpdateEmailRequest.java
@@ -27,7 +27,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import org.hibernate.validator.constraints.Length;
-import cn.hutool.core.lang.RegexPool;
+import top.charles7c.cnadmin.common.constant.RegexConsts;
/**
* 修改邮箱信息
@@ -46,7 +46,7 @@ public class UpdateEmailRequest implements Serializable {
*/
@Schema(description = "新邮箱")
@NotBlank(message = "新邮箱不能为空")
- @Pattern(regexp = RegexPool.EMAIL, message = "邮箱格式错误")
+ @Pattern(regexp = RegexConsts.EMAIL, message = "邮箱格式错误")
private String newEmail;
/**
diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/UserRequest.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/UserRequest.java
index 0511b59b..0589b823 100644
--- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/UserRequest.java
+++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/request/UserRequest.java
@@ -18,7 +18,9 @@ package top.charles7c.cnadmin.system.model.request;
import java.util.List;
-import javax.validation.constraints.*;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
import lombok.Data;
@@ -26,9 +28,8 @@ import io.swagger.v3.oas.annotations.media.Schema;
import org.hibernate.validator.constraints.Length;
-import cn.hutool.core.lang.RegexPool;
-
import top.charles7c.cnadmin.common.base.BaseRequest;
+import top.charles7c.cnadmin.common.constant.RegexConsts;
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
import top.charles7c.cnadmin.common.enums.GenderEnum;
@@ -49,27 +50,29 @@ public class UserRequest extends BaseRequest {
*/
@Schema(description = "用户名")
@NotBlank(message = "用户名不能为空")
+ @Pattern(regexp = RegexConsts.USERNAME, message = "用户名长度为 4 到 16 位,可以包含字母、数字,下划线,以字母开头")
private String username;
/**
* 昵称
*/
@Schema(description = "昵称")
- @Length(max = 32, message = "昵称长度不能超过 {max} 个字符")
+ @NotBlank(message = "昵称不能为空")
+ @Pattern(regexp = RegexConsts.GENERAL_NAME, message = "昵称长度为 1 到 20 位,可以包含中文、字母、数字、下划线,短横线")
private String nickname;
/**
* 邮箱
*/
@Schema(description = "邮箱")
- @Pattern(regexp = RegexPool.EMAIL, message = "邮箱格式错误")
+ @Pattern(regexp = RegexConsts.EMAIL, message = "邮箱格式错误")
private String email;
/**
* 手机号码
*/
@Schema(description = "手机号码")
- @Pattern(regexp = RegexPool.MOBILE, message = "手机号码格式错误")
+ @Pattern(regexp = RegexConsts.MOBILE, message = "手机号码格式错误")
private String phone;
/**
diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/UserService.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/UserService.java
index a769acec..17049ae3 100644
--- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/UserService.java
+++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/UserService.java
@@ -23,6 +23,7 @@ import org.springframework.web.multipart.MultipartFile;
import top.charles7c.cnadmin.common.base.BaseService;
import top.charles7c.cnadmin.system.model.entity.UserDO;
import top.charles7c.cnadmin.system.model.query.UserQuery;
+import top.charles7c.cnadmin.system.model.request.UpdateBasicInfoRequest;
import top.charles7c.cnadmin.system.model.request.UpdateUserRoleRequest;
import top.charles7c.cnadmin.system.model.request.UserRequest;
import top.charles7c.cnadmin.system.model.vo.UserDetailVO;
@@ -47,6 +48,16 @@ public interface UserService extends BaseService
@@ -70,12 +70,20 @@
required: true,
message: t('userCenter.basicInfo.form.error.required.username'),
},
+ {
+ match: /^[a-zA-Z][a-zA-Z0-9_]{3,15}$/,
+ message: t('userCenter.basicInfo.form.error.match.username'),
+ },
],
nickname: [
{
required: true,
message: t('userCenter.basicInfo.form.error.required.nickname'),
},
+ {
+ match: /^[\u4e00-\u9fa5a-zA-Z0-9_-]{1,20}$/,
+ message: t('userCenter.basicInfo.form.error.match.nickname'),
+ },
],
};
}),
diff --git a/continew-admin-ui/src/views/system/user/center/locale/en-US.ts b/continew-admin-ui/src/views/system/user/center/locale/en-US.ts
index ed674c00..0ed53611 100644
--- a/continew-admin-ui/src/views/system/user/center/locale/en-US.ts
+++ b/continew-admin-ui/src/views/system/user/center/locale/en-US.ts
@@ -25,7 +25,9 @@ export default {
'userCenter.basicInfo.form.placeholder.nickname': 'Please enter nickname',
'userCenter.basicInfo.form.error.required.username': 'Please enter username',
+ 'userCenter.basicInfo.form.error.match.username': 'Username are 4 to 16 characters long and can contain letters, numbers, underscores, and start with a letter',
'userCenter.basicInfo.form.error.required.nickname': 'Please enter nickname',
+ 'userCenter.basicInfo.form.error.match.nickname': 'Nickname are 1 to 20 digits long and can contain Chinese, letters, numbers, underscores, dashes',
'userCenter.basicInfo.form.save': 'Save',
'userCenter.basicInfo.form.save.success': 'Save success',
diff --git a/continew-admin-ui/src/views/system/user/center/locale/zh-CN.ts b/continew-admin-ui/src/views/system/user/center/locale/zh-CN.ts
index c5a7eedb..592b19e4 100644
--- a/continew-admin-ui/src/views/system/user/center/locale/zh-CN.ts
+++ b/continew-admin-ui/src/views/system/user/center/locale/zh-CN.ts
@@ -25,7 +25,9 @@ export default {
'userCenter.basicInfo.form.placeholder.nickname': '请输入昵称',
'userCenter.basicInfo.form.error.required.username': '请输入用户名',
+ 'userCenter.basicInfo.form.error.match.username': '长度为 4 到 16 位,可以包含字母、数字,下划线,以字母开头',
'userCenter.basicInfo.form.error.required.nickname': '请输入昵称',
+ 'userCenter.basicInfo.form.error.match.nickname': '长度为 1 到 20 位,可以包含中文、字母、数字、下划线,短横线',
'userCenter.basicInfo.form.save': '保存',
'userCenter.basicInfo.form.save.success': '保存成功',
@@ -44,12 +46,12 @@ export default {
'userCenter.securitySettings.updatePwd.form.label.rePassword': '确认新密码',
'userCenter.securitySettings.updatePwd.form.placeholder.oldPassword': '请输入当前密码',
- 'userCenter.securitySettings.updatePwd.form.placeholder.newPassword': '密码长度 6 到 32 位,同时包含数字和字母',
+ 'userCenter.securitySettings.updatePwd.form.placeholder.newPassword': '长度为 6 到 32 位,同时包含字母和数字',
'userCenter.securitySettings.updatePwd.form.placeholder.rePassword': '请再次输入新密码',
'userCenter.securitySettings.updatePwd.form.error.required.oldPassword': '请输入当前密码',
'userCenter.securitySettings.updatePwd.form.error.required.newPassword': '请输入新密码',
- 'userCenter.securitySettings.updatePwd.form.error.match.newPassword': '密码长度 6 到 32 位,同时包含数字和字母',
+ 'userCenter.securitySettings.updatePwd.form.error.match.newPassword': '长度为 6 到 32 位,同时包含字母和数字',
'userCenter.securitySettings.updatePwd.form.error.validator.newPassword': '新密码不能与当前密码相同',
'userCenter.securitySettings.updatePwd.form.error.required.rePassword': '请再次输入新密码',
'userCenter.securitySettings.updatePwd.form.error.validator.rePassword': '两次输入的密码不一致',
diff --git a/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/common/CaptchaController.java b/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/common/CaptchaController.java
index 63358749..d0f1a133 100644
--- a/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/common/CaptchaController.java
+++ b/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/common/CaptchaController.java
@@ -36,16 +36,18 @@ import com.wf.captcha.base.Captcha;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.lang.Dict;
-import cn.hutool.core.lang.RegexPool;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import top.charles7c.cnadmin.common.config.properties.CaptchaProperties;
import top.charles7c.cnadmin.common.config.properties.ContiNewAdminProperties;
import top.charles7c.cnadmin.common.constant.CacheConsts;
+import top.charles7c.cnadmin.common.constant.RegexConsts;
import top.charles7c.cnadmin.common.model.vo.CaptchaVO;
import top.charles7c.cnadmin.common.model.vo.R;
-import top.charles7c.cnadmin.common.util.*;
+import top.charles7c.cnadmin.common.util.MailUtils;
+import top.charles7c.cnadmin.common.util.RedisUtils;
+import top.charles7c.cnadmin.common.util.TemplateUtils;
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
/**
@@ -86,7 +88,7 @@ public class CaptchaController {
@Operation(summary = "获取邮箱验证码", description = "发送验证码到指定邮箱")
@GetMapping("/mail")
public R getMailCaptcha(
- @NotBlank(message = "邮箱不能为空") @Pattern(regexp = RegexPool.EMAIL, message = "邮箱格式错误") String email)
+ @NotBlank(message = "邮箱不能为空") @Pattern(regexp = RegexConsts.EMAIL, message = "邮箱格式错误") String email)
throws MessagingException {
String limitKeyPrefix = CacheConsts.LIMIT_KEY_PREFIX;
String captchaKeyPrefix = CacheConsts.CAPTCHA_KEY_PREFIX;
diff --git a/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/system/UserCenterController.java b/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/system/UserCenterController.java
index 1bce65be..d7b7af6f 100644
--- a/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/system/UserCenterController.java
+++ b/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/system/UserCenterController.java
@@ -27,11 +27,10 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
-import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ReUtil;
import top.charles7c.cnadmin.common.constant.CacheConsts;
-import top.charles7c.cnadmin.common.constant.RegExpConsts;
+import top.charles7c.cnadmin.common.constant.RegexConsts;
import top.charles7c.cnadmin.common.model.vo.R;
import top.charles7c.cnadmin.common.util.ExceptionUtils;
import top.charles7c.cnadmin.common.util.RedisUtils;
@@ -41,7 +40,6 @@ import top.charles7c.cnadmin.common.util.validate.ValidationUtils;
import top.charles7c.cnadmin.system.model.request.UpdateBasicInfoRequest;
import top.charles7c.cnadmin.system.model.request.UpdateEmailRequest;
import top.charles7c.cnadmin.system.model.request.UpdatePasswordRequest;
-import top.charles7c.cnadmin.system.model.request.UserRequest;
import top.charles7c.cnadmin.system.model.vo.AvatarVO;
import top.charles7c.cnadmin.system.service.UserService;
@@ -73,9 +71,7 @@ public class UserCenterController {
@Operation(summary = "修改基础信息", description = "修改用户基础信息")
@PatchMapping("/basic/info")
public R updateBasicInfo(@Validated @RequestBody UpdateBasicInfoRequest updateBasicInfoRequest) {
- UserRequest userRequest = new UserRequest();
- BeanUtil.copyProperties(updateBasicInfoRequest, userRequest);
- userService.update(userRequest, LoginHelper.getUserId());
+ userService.updateBasicInfo(updateBasicInfoRequest, LoginHelper.getUserId());
return R.ok("修改成功");
}
@@ -88,7 +84,7 @@ public class UserCenterController {
String rawNewPassword =
ExceptionUtils.exToNull(() -> SecureUtils.decryptByRsaPrivateKey(updatePasswordRequest.getNewPassword()));
ValidationUtils.throwIfBlank(rawNewPassword, "新密码解密失败");
- ValidationUtils.throwIf(!ReUtil.isMatch(RegExpConsts.PASSWORD, rawNewPassword), "密码长度 6 到 32 位,同时包含数字和字母");
+ ValidationUtils.throwIf(!ReUtil.isMatch(RegexConsts.PASSWORD, rawNewPassword), "密码长度 6 到 32 位,同时包含字母和数字");
// 修改密码
userService.updatePassword(rawOldPassword, rawNewPassword, LoginHelper.getUserId());