mirror of
				https://github.com/continew-org/continew-admin.git
				synced 2025-10-31 22:57:17 +08:00 
			
		
		
		
	修复:补充校验
This commit is contained in:
		| @@ -19,6 +19,8 @@ package top.charles7c.cnadmin.common.constant; | |||||||
| import lombok.AccessLevel; | import lombok.AccessLevel; | ||||||
| import lombok.NoArgsConstructor; | import lombok.NoArgsConstructor; | ||||||
| 
 | 
 | ||||||
|  | import cn.hutool.core.lang.RegexPool; | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * 正则相关常量 |  * 正则相关常量 | ||||||
|  * |  * | ||||||
| @@ -26,10 +28,25 @@ import lombok.NoArgsConstructor; | |||||||
|  * @since 2023/1/10 20:06 |  * @since 2023/1/10 20:06 | ||||||
|  */ |  */ | ||||||
| @NoArgsConstructor(access = AccessLevel.PRIVATE) | @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}$"; |     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}$"; | ||||||
| } | } | ||||||
| @@ -18,6 +18,7 @@ package top.charles7c.cnadmin.system.model.request; | |||||||
|  |  | ||||||
| import javax.validation.constraints.NotBlank; | import javax.validation.constraints.NotBlank; | ||||||
| import javax.validation.constraints.NotNull; | import javax.validation.constraints.NotNull; | ||||||
|  | import javax.validation.constraints.Pattern; | ||||||
|  |  | ||||||
| import lombok.Data; | import lombok.Data; | ||||||
|  |  | ||||||
| @@ -26,6 +27,7 @@ import io.swagger.v3.oas.annotations.media.Schema; | |||||||
| import org.hibernate.validator.constraints.Length; | import org.hibernate.validator.constraints.Length; | ||||||
|  |  | ||||||
| import top.charles7c.cnadmin.common.base.BaseRequest; | 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.DisEnableStatusEnum; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -52,6 +54,7 @@ public class DeptRequest extends BaseRequest { | |||||||
|      */ |      */ | ||||||
|     @Schema(description = "部门名称") |     @Schema(description = "部门名称") | ||||||
|     @NotBlank(message = "部门名称不能为空") |     @NotBlank(message = "部门名称不能为空") | ||||||
|  |     @Pattern(regexp = RegexConsts.GENERAL_NAME, message = "部门名称长度为 1 到 20 位,可以包含中文、字母、数字、下划线,短横线") | ||||||
|     private String name; |     private String name; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|   | |||||||
| @@ -18,12 +18,14 @@ package top.charles7c.cnadmin.system.model.request; | |||||||
|  |  | ||||||
| import javax.validation.constraints.NotBlank; | import javax.validation.constraints.NotBlank; | ||||||
| import javax.validation.constraints.NotNull; | import javax.validation.constraints.NotNull; | ||||||
|  | import javax.validation.constraints.Pattern; | ||||||
|  |  | ||||||
| import lombok.Data; | import lombok.Data; | ||||||
|  |  | ||||||
| import io.swagger.v3.oas.annotations.media.Schema; | import io.swagger.v3.oas.annotations.media.Schema; | ||||||
|  |  | ||||||
| import top.charles7c.cnadmin.common.base.BaseRequest; | 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.DisEnableStatusEnum; | ||||||
| import top.charles7c.cnadmin.common.enums.MenuTypeEnum; | import top.charles7c.cnadmin.common.enums.MenuTypeEnum; | ||||||
|  |  | ||||||
| @@ -57,6 +59,7 @@ public class MenuRequest extends BaseRequest { | |||||||
|      */ |      */ | ||||||
|     @Schema(description = "菜单标题") |     @Schema(description = "菜单标题") | ||||||
|     @NotBlank(message = "菜单标题不能为空") |     @NotBlank(message = "菜单标题不能为空") | ||||||
|  |     @Pattern(regexp = RegexConsts.GENERAL_NAME, message = "菜单标题长度为 1 到 20 位,可以包含中文、字母、数字、下划线,短横线") | ||||||
|     private String title; |     private String title; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|   | |||||||
| @@ -21,6 +21,7 @@ import java.util.List; | |||||||
|  |  | ||||||
| import javax.validation.constraints.NotBlank; | import javax.validation.constraints.NotBlank; | ||||||
| import javax.validation.constraints.NotNull; | import javax.validation.constraints.NotNull; | ||||||
|  | import javax.validation.constraints.Pattern; | ||||||
|  |  | ||||||
| import lombok.Data; | import lombok.Data; | ||||||
|  |  | ||||||
| @@ -29,6 +30,7 @@ import io.swagger.v3.oas.annotations.media.Schema; | |||||||
| import org.hibernate.validator.constraints.Length; | import org.hibernate.validator.constraints.Length; | ||||||
|  |  | ||||||
| import top.charles7c.cnadmin.common.base.BaseRequest; | 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.DataScopeEnum; | ||||||
| import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum; | import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum; | ||||||
|  |  | ||||||
| @@ -49,12 +51,15 @@ public class RoleRequest extends BaseRequest { | |||||||
|      */ |      */ | ||||||
|     @Schema(description = "角色名称") |     @Schema(description = "角色名称") | ||||||
|     @NotBlank(message = "角色名称不能为空") |     @NotBlank(message = "角色名称不能为空") | ||||||
|  |     @Pattern(regexp = RegexConsts.GENERAL_NAME, message = "角色名称长度为 1 到 20 位,可以包含中文、字母、数字、下划线,短横线") | ||||||
|     private String name; |     private String name; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 角色编码 |      * 角色编码 | ||||||
|      */ |      */ | ||||||
|     @Schema(description = "角色编码") |     @Schema(description = "角色编码") | ||||||
|  |     @NotBlank(message = "角色编码不能为空") | ||||||
|  |     @Pattern(regexp = RegexConsts.GENERAL_CODE, message = "角色编码长度为 2 到 16 位,可以包含字母、数字,下划线,以字母开头") | ||||||
|     private String code; |     private String code; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|   | |||||||
| @@ -20,13 +20,13 @@ import java.io.Serializable; | |||||||
|  |  | ||||||
| import javax.validation.constraints.NotBlank; | import javax.validation.constraints.NotBlank; | ||||||
| import javax.validation.constraints.NotNull; | import javax.validation.constraints.NotNull; | ||||||
|  | import javax.validation.constraints.Pattern; | ||||||
|  |  | ||||||
| import lombok.Data; | import lombok.Data; | ||||||
|  |  | ||||||
| import io.swagger.v3.oas.annotations.media.Schema; | 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; | import top.charles7c.cnadmin.common.enums.GenderEnum; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -46,7 +46,7 @@ public class UpdateBasicInfoRequest implements Serializable { | |||||||
|      */ |      */ | ||||||
|     @Schema(description = "昵称") |     @Schema(description = "昵称") | ||||||
|     @NotBlank(message = "昵称不能为空") |     @NotBlank(message = "昵称不能为空") | ||||||
|     @Length(max = 32, message = "昵称长度不能超过 {max} 个字符") |     @Pattern(regexp = RegexConsts.GENERAL_NAME, message = "昵称长度为 1 到 20 位,可以包含中文、字母、数字、下划线,短横线") | ||||||
|     private String nickname; |     private String nickname; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|   | |||||||
| @@ -27,7 +27,7 @@ import io.swagger.v3.oas.annotations.media.Schema; | |||||||
|  |  | ||||||
| import org.hibernate.validator.constraints.Length; | 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 = "新邮箱") |     @Schema(description = "新邮箱") | ||||||
|     @NotBlank(message = "新邮箱不能为空") |     @NotBlank(message = "新邮箱不能为空") | ||||||
|     @Pattern(regexp = RegexPool.EMAIL, message = "邮箱格式错误") |     @Pattern(regexp = RegexConsts.EMAIL, message = "邮箱格式错误") | ||||||
|     private String newEmail; |     private String newEmail; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|   | |||||||
| @@ -18,7 +18,9 @@ package top.charles7c.cnadmin.system.model.request; | |||||||
|  |  | ||||||
| import java.util.List; | 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; | import lombok.Data; | ||||||
|  |  | ||||||
| @@ -26,9 +28,8 @@ import io.swagger.v3.oas.annotations.media.Schema; | |||||||
|  |  | ||||||
| import org.hibernate.validator.constraints.Length; | import org.hibernate.validator.constraints.Length; | ||||||
|  |  | ||||||
| import cn.hutool.core.lang.RegexPool; |  | ||||||
|  |  | ||||||
| import top.charles7c.cnadmin.common.base.BaseRequest; | 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.DisEnableStatusEnum; | ||||||
| import top.charles7c.cnadmin.common.enums.GenderEnum; | import top.charles7c.cnadmin.common.enums.GenderEnum; | ||||||
|  |  | ||||||
| @@ -49,27 +50,29 @@ public class UserRequest extends BaseRequest { | |||||||
|      */ |      */ | ||||||
|     @Schema(description = "用户名") |     @Schema(description = "用户名") | ||||||
|     @NotBlank(message = "用户名不能为空") |     @NotBlank(message = "用户名不能为空") | ||||||
|  |     @Pattern(regexp = RegexConsts.USERNAME, message = "用户名长度为 4 到 16 位,可以包含字母、数字,下划线,以字母开头") | ||||||
|     private String username; |     private String username; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 昵称 |      * 昵称 | ||||||
|      */ |      */ | ||||||
|     @Schema(description = "昵称") |     @Schema(description = "昵称") | ||||||
|     @Length(max = 32, message = "昵称长度不能超过 {max} 个字符") |     @NotBlank(message = "昵称不能为空") | ||||||
|  |     @Pattern(regexp = RegexConsts.GENERAL_NAME, message = "昵称长度为 1 到 20 位,可以包含中文、字母、数字、下划线,短横线") | ||||||
|     private String nickname; |     private String nickname; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 邮箱 |      * 邮箱 | ||||||
|      */ |      */ | ||||||
|     @Schema(description = "邮箱") |     @Schema(description = "邮箱") | ||||||
|     @Pattern(regexp = RegexPool.EMAIL, message = "邮箱格式错误") |     @Pattern(regexp = RegexConsts.EMAIL, message = "邮箱格式错误") | ||||||
|     private String email; |     private String email; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 手机号码 |      * 手机号码 | ||||||
|      */ |      */ | ||||||
|     @Schema(description = "手机号码") |     @Schema(description = "手机号码") | ||||||
|     @Pattern(regexp = RegexPool.MOBILE, message = "手机号码格式错误") |     @Pattern(regexp = RegexConsts.MOBILE, message = "手机号码格式错误") | ||||||
|     private String phone; |     private String phone; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|   | |||||||
| @@ -23,6 +23,7 @@ import org.springframework.web.multipart.MultipartFile; | |||||||
| import top.charles7c.cnadmin.common.base.BaseService; | import top.charles7c.cnadmin.common.base.BaseService; | ||||||
| import top.charles7c.cnadmin.system.model.entity.UserDO; | import top.charles7c.cnadmin.system.model.entity.UserDO; | ||||||
| import top.charles7c.cnadmin.system.model.query.UserQuery; | 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.UpdateUserRoleRequest; | ||||||
| import top.charles7c.cnadmin.system.model.request.UserRequest; | import top.charles7c.cnadmin.system.model.request.UserRequest; | ||||||
| import top.charles7c.cnadmin.system.model.vo.UserDetailVO; | import top.charles7c.cnadmin.system.model.vo.UserDetailVO; | ||||||
| @@ -47,6 +48,16 @@ public interface UserService extends BaseService<UserVO, UserDetailVO, UserQuery | |||||||
|      */ |      */ | ||||||
|     String uploadAvatar(MultipartFile avatar, Long id); |     String uploadAvatar(MultipartFile avatar, Long id); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改基础信息 | ||||||
|  |      * | ||||||
|  |      * @param request | ||||||
|  |      *            修改信息 | ||||||
|  |      * @param id | ||||||
|  |      *            ID | ||||||
|  |      */ | ||||||
|  |     void updateBasicInfo(UpdateBasicInfoRequest request, Long id); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 修改密码 |      * 修改密码 | ||||||
|      * |      * | ||||||
|   | |||||||
| @@ -52,11 +52,15 @@ import top.charles7c.cnadmin.common.util.validate.CheckUtils; | |||||||
| import top.charles7c.cnadmin.system.mapper.UserMapper; | import top.charles7c.cnadmin.system.mapper.UserMapper; | ||||||
| import top.charles7c.cnadmin.system.model.entity.UserDO; | import top.charles7c.cnadmin.system.model.entity.UserDO; | ||||||
| import top.charles7c.cnadmin.system.model.query.UserQuery; | 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.UpdateUserRoleRequest; | ||||||
| import top.charles7c.cnadmin.system.model.request.UserRequest; | import top.charles7c.cnadmin.system.model.request.UserRequest; | ||||||
| import top.charles7c.cnadmin.system.model.vo.UserDetailVO; | import top.charles7c.cnadmin.system.model.vo.UserDetailVO; | ||||||
| import top.charles7c.cnadmin.system.model.vo.UserVO; | import top.charles7c.cnadmin.system.model.vo.UserVO; | ||||||
| import top.charles7c.cnadmin.system.service.*; | import top.charles7c.cnadmin.system.service.DeptService; | ||||||
|  | import top.charles7c.cnadmin.system.service.RoleService; | ||||||
|  | import top.charles7c.cnadmin.system.service.UserRoleService; | ||||||
|  | import top.charles7c.cnadmin.system.service.UserService; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 用户业务实现类 |  * 用户业务实现类 | ||||||
| @@ -181,6 +185,13 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserVO, | |||||||
|         return newAvatar; |         return newAvatar; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void updateBasicInfo(UpdateBasicInfoRequest request, Long id) { | ||||||
|  |         super.getById(id); | ||||||
|  |         baseMapper.lambdaUpdate().set(UserDO::getNickname, request.getNickname()) | ||||||
|  |             .set(UserDO::getGender, request.getGender()).eq(UserDO::getId, id).update(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     @Transactional(rollbackFor = Exception.class) |     @Transactional(rollbackFor = Exception.class) | ||||||
|     public void updatePassword(String oldPassword, String newPassword, Long id) { |     public void updatePassword(String oldPassword, String newPassword, Long id) { | ||||||
|   | |||||||
| @@ -464,7 +464,20 @@ | |||||||
|     form: {} as RoleRecord, |     form: {} as RoleRecord, | ||||||
|     // 表单验证规则 |     // 表单验证规则 | ||||||
|     rules: { |     rules: { | ||||||
|       name: [{ required: true, message: '请输入角色名称' }], |       name: [ | ||||||
|  |         { required: true, message: '请输入角色名称' }, | ||||||
|  |         { | ||||||
|  |           match: /^[\u4e00-\u9fa5a-zA-Z0-9_-]{1,20}$/, | ||||||
|  |           message: '长度为 1 到 20 位,可以包含中文、字母、数字、下划线,短横线' | ||||||
|  |         }, | ||||||
|  |       ], | ||||||
|  |       code: [ | ||||||
|  |         { required: true, message: '请输入角色编码' }, | ||||||
|  |         { | ||||||
|  |           match: /^[a-zA-Z][a-zA-Z0-9_]{1,15}$/, | ||||||
|  |           message: '长度为 2 到 16 位,可以包含字母、数字,下划线,以字母开头' | ||||||
|  |         }, | ||||||
|  |       ], | ||||||
|       dataScope: [{ required: true, message: '请选择数据权限' }], |       dataScope: [{ required: true, message: '请选择数据权限' }], | ||||||
|       sort: [{ required: true, message: '请输入角色排序' }], |       sort: [{ required: true, message: '请输入角色排序' }], | ||||||
|     }, |     }, | ||||||
|   | |||||||
| @@ -12,14 +12,14 @@ | |||||||
|       <a-input |       <a-input | ||||||
|         v-model="form.username" |         v-model="form.username" | ||||||
|         :placeholder="$t('userCenter.basicInfo.form.placeholder.username')" |         :placeholder="$t('userCenter.basicInfo.form.placeholder.username')" | ||||||
|         max-length="50" |         max-length="16" | ||||||
|       /> |       /> | ||||||
|     </a-form-item> |     </a-form-item> | ||||||
|     <a-form-item :label="$t('userCenter.basicInfo.form.label.nickname')" field="nickname"> |     <a-form-item :label="$t('userCenter.basicInfo.form.label.nickname')" field="nickname"> | ||||||
|       <a-input |       <a-input | ||||||
|         v-model="form.nickname" |         v-model="form.nickname" | ||||||
|         :placeholder="$t('userCenter.basicInfo.form.placeholder.nickname')" |         :placeholder="$t('userCenter.basicInfo.form.placeholder.nickname')" | ||||||
|         max-length="32" |         max-length="20" | ||||||
|       /> |       /> | ||||||
|     </a-form-item> |     </a-form-item> | ||||||
|     <a-form-item :label="$t('userCenter.basicInfo.form.label.gender')" field="gender"> |     <a-form-item :label="$t('userCenter.basicInfo.form.label.gender')" field="gender"> | ||||||
| @@ -70,12 +70,20 @@ | |||||||
|             required: true, |             required: true, | ||||||
|             message: t('userCenter.basicInfo.form.error.required.username'), |             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: [ |         nickname: [ | ||||||
|           { |           { | ||||||
|             required: true, |             required: true, | ||||||
|             message: t('userCenter.basicInfo.form.error.required.nickname'), |             message: t('userCenter.basicInfo.form.error.required.nickname'), | ||||||
|           }, |           }, | ||||||
|  |           { | ||||||
|  |             match: /^[\u4e00-\u9fa5a-zA-Z0-9_-]{1,20}$/, | ||||||
|  |             message: t('userCenter.basicInfo.form.error.match.nickname'), | ||||||
|  |           }, | ||||||
|         ], |         ], | ||||||
|       }; |       }; | ||||||
|     }), |     }), | ||||||
|   | |||||||
| @@ -25,7 +25,9 @@ export default { | |||||||
|   'userCenter.basicInfo.form.placeholder.nickname': 'Please enter nickname', |   'userCenter.basicInfo.form.placeholder.nickname': 'Please enter nickname', | ||||||
|  |  | ||||||
|   'userCenter.basicInfo.form.error.required.username': 'Please enter username', |   '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.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': 'Save', | ||||||
|   'userCenter.basicInfo.form.save.success': 'Save success', |   'userCenter.basicInfo.form.save.success': 'Save success', | ||||||
|   | |||||||
| @@ -25,7 +25,9 @@ export default { | |||||||
|   'userCenter.basicInfo.form.placeholder.nickname': '请输入昵称', |   'userCenter.basicInfo.form.placeholder.nickname': '请输入昵称', | ||||||
|  |  | ||||||
|   'userCenter.basicInfo.form.error.required.username': '请输入用户名', |   'userCenter.basicInfo.form.error.required.username': '请输入用户名', | ||||||
|  |   'userCenter.basicInfo.form.error.match.username': '长度为 4 到 16 位,可以包含字母、数字,下划线,以字母开头', | ||||||
|   'userCenter.basicInfo.form.error.required.nickname': '请输入昵称', |   'userCenter.basicInfo.form.error.required.nickname': '请输入昵称', | ||||||
|  |   'userCenter.basicInfo.form.error.match.nickname': '长度为 1 到 20 位,可以包含中文、字母、数字、下划线,短横线', | ||||||
|  |  | ||||||
|   'userCenter.basicInfo.form.save': '保存', |   'userCenter.basicInfo.form.save': '保存', | ||||||
|   'userCenter.basicInfo.form.save.success': '保存成功', |   'userCenter.basicInfo.form.save.success': '保存成功', | ||||||
| @@ -44,12 +46,12 @@ export default { | |||||||
|   'userCenter.securitySettings.updatePwd.form.label.rePassword': '确认新密码', |   'userCenter.securitySettings.updatePwd.form.label.rePassword': '确认新密码', | ||||||
|  |  | ||||||
|   'userCenter.securitySettings.updatePwd.form.placeholder.oldPassword': '请输入当前密码', |   '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.placeholder.rePassword': '请再次输入新密码', | ||||||
|  |  | ||||||
|   'userCenter.securitySettings.updatePwd.form.error.required.oldPassword': '请输入当前密码', |   'userCenter.securitySettings.updatePwd.form.error.required.oldPassword': '请输入当前密码', | ||||||
|   'userCenter.securitySettings.updatePwd.form.error.required.newPassword': '请输入新密码', |   '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.validator.newPassword': '新密码不能与当前密码相同', | ||||||
|   'userCenter.securitySettings.updatePwd.form.error.required.rePassword': '请再次输入新密码', |   'userCenter.securitySettings.updatePwd.form.error.required.rePassword': '请再次输入新密码', | ||||||
|   'userCenter.securitySettings.updatePwd.form.error.validator.rePassword': '两次输入的密码不一致', |   'userCenter.securitySettings.updatePwd.form.error.validator.rePassword': '两次输入的密码不一致', | ||||||
|   | |||||||
| @@ -36,16 +36,18 @@ import com.wf.captcha.base.Captcha; | |||||||
|  |  | ||||||
| import cn.dev33.satoken.annotation.SaIgnore; | import cn.dev33.satoken.annotation.SaIgnore; | ||||||
| import cn.hutool.core.lang.Dict; | import cn.hutool.core.lang.Dict; | ||||||
| import cn.hutool.core.lang.RegexPool; |  | ||||||
| import cn.hutool.core.util.IdUtil; | import cn.hutool.core.util.IdUtil; | ||||||
| import cn.hutool.core.util.RandomUtil; | import cn.hutool.core.util.RandomUtil; | ||||||
|  |  | ||||||
| import top.charles7c.cnadmin.common.config.properties.CaptchaProperties; | import top.charles7c.cnadmin.common.config.properties.CaptchaProperties; | ||||||
| import top.charles7c.cnadmin.common.config.properties.ContiNewAdminProperties; | import top.charles7c.cnadmin.common.config.properties.ContiNewAdminProperties; | ||||||
| import top.charles7c.cnadmin.common.constant.CacheConsts; | 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.CaptchaVO; | ||||||
| import top.charles7c.cnadmin.common.model.vo.R; | 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; | import top.charles7c.cnadmin.common.util.validate.CheckUtils; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -86,7 +88,7 @@ public class CaptchaController { | |||||||
|     @Operation(summary = "获取邮箱验证码", description = "发送验证码到指定邮箱") |     @Operation(summary = "获取邮箱验证码", description = "发送验证码到指定邮箱") | ||||||
|     @GetMapping("/mail") |     @GetMapping("/mail") | ||||||
|     public R getMailCaptcha( |     public R getMailCaptcha( | ||||||
|         @NotBlank(message = "邮箱不能为空") @Pattern(regexp = RegexPool.EMAIL, message = "邮箱格式错误") String email) |         @NotBlank(message = "邮箱不能为空") @Pattern(regexp = RegexConsts.EMAIL, message = "邮箱格式错误") String email) | ||||||
|         throws MessagingException { |         throws MessagingException { | ||||||
|         String limitKeyPrefix = CacheConsts.LIMIT_KEY_PREFIX; |         String limitKeyPrefix = CacheConsts.LIMIT_KEY_PREFIX; | ||||||
|         String captchaKeyPrefix = CacheConsts.CAPTCHA_KEY_PREFIX; |         String captchaKeyPrefix = CacheConsts.CAPTCHA_KEY_PREFIX; | ||||||
|   | |||||||
| @@ -27,11 +27,10 @@ import org.springframework.validation.annotation.Validated; | |||||||
| import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||||
| import org.springframework.web.multipart.MultipartFile; | import org.springframework.web.multipart.MultipartFile; | ||||||
|  |  | ||||||
| import cn.hutool.core.bean.BeanUtil; |  | ||||||
| import cn.hutool.core.util.ReUtil; | import cn.hutool.core.util.ReUtil; | ||||||
|  |  | ||||||
| import top.charles7c.cnadmin.common.constant.CacheConsts; | 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.model.vo.R; | ||||||
| import top.charles7c.cnadmin.common.util.ExceptionUtils; | import top.charles7c.cnadmin.common.util.ExceptionUtils; | ||||||
| import top.charles7c.cnadmin.common.util.RedisUtils; | 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.UpdateBasicInfoRequest; | ||||||
| import top.charles7c.cnadmin.system.model.request.UpdateEmailRequest; | import top.charles7c.cnadmin.system.model.request.UpdateEmailRequest; | ||||||
| import top.charles7c.cnadmin.system.model.request.UpdatePasswordRequest; | 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.model.vo.AvatarVO; | ||||||
| import top.charles7c.cnadmin.system.service.UserService; | import top.charles7c.cnadmin.system.service.UserService; | ||||||
|  |  | ||||||
| @@ -73,9 +71,7 @@ public class UserCenterController { | |||||||
|     @Operation(summary = "修改基础信息", description = "修改用户基础信息") |     @Operation(summary = "修改基础信息", description = "修改用户基础信息") | ||||||
|     @PatchMapping("/basic/info") |     @PatchMapping("/basic/info") | ||||||
|     public R updateBasicInfo(@Validated @RequestBody UpdateBasicInfoRequest updateBasicInfoRequest) { |     public R updateBasicInfo(@Validated @RequestBody UpdateBasicInfoRequest updateBasicInfoRequest) { | ||||||
|         UserRequest userRequest = new UserRequest(); |         userService.updateBasicInfo(updateBasicInfoRequest, LoginHelper.getUserId()); | ||||||
|         BeanUtil.copyProperties(updateBasicInfoRequest, userRequest); |  | ||||||
|         userService.update(userRequest, LoginHelper.getUserId()); |  | ||||||
|         return R.ok("修改成功"); |         return R.ok("修改成功"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -88,7 +84,7 @@ public class UserCenterController { | |||||||
|         String rawNewPassword = |         String rawNewPassword = | ||||||
|             ExceptionUtils.exToNull(() -> SecureUtils.decryptByRsaPrivateKey(updatePasswordRequest.getNewPassword())); |             ExceptionUtils.exToNull(() -> SecureUtils.decryptByRsaPrivateKey(updatePasswordRequest.getNewPassword())); | ||||||
|         ValidationUtils.throwIfBlank(rawNewPassword, "新密码解密失败"); |         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()); |         userService.updatePassword(rawOldPassword, rawNewPassword, LoginHelper.getUserId()); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user