From 3d77aa91ee32065b53d9c47a57c33d6d7e4efb0e Mon Sep 17 00:00:00 2001 From: Charles7c <charles7c@126.com> Date: Fri, 2 Feb 2024 23:44:21 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=8F=96=E6=B6=88=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E9=BB=98=E8=AE=A4=E5=AF=86=E7=A0=81=EF=BC=8C=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E8=A1=A8=E5=8D=95=E5=A1=AB=E5=86=99=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.修复 Sonar 扫描问题 2.优化部分代码 --- .../admin/common/constant/SysConstants.java | 5 --- .../model/req/UserPasswordResetReq.java | 45 +++++++++++++++++++ .../admin/system/model/req/UserReq.java | 8 ++++ .../admin/system/service/UserService.java | 6 ++- .../system/service/impl/UserServiceImpl.java | 20 ++++----- .../webapi/auth/SocialAuthController.java | 2 +- .../webapi/common/CaptchaController.java | 8 ++-- .../webapi/monitor/OnlineUserController.java | 2 +- .../webapi/system/AnnouncementController.java | 4 +- .../admin/webapi/system/MenuController.java | 2 +- .../webapi/system/MessageController.java | 4 +- .../admin/webapi/system/OptionController.java | 4 +- .../webapi/system/UserCenterController.java | 14 +++--- .../admin/webapi/system/UserController.java | 32 ++++++++----- .../webapi/tool/GeneratorController.java | 4 +- .../main/resources/config/application-dev.yml | 6 +-- .../resources/config/application-prod.yml | 6 +-- 17 files changed, 111 insertions(+), 61 deletions(-) create mode 100644 continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/req/UserPasswordResetReq.java diff --git a/continew-admin-common/src/main/java/top/charles7c/continew/admin/common/constant/SysConstants.java b/continew-admin-common/src/main/java/top/charles7c/continew/admin/common/constant/SysConstants.java index b4dd0b2a..1164ee9d 100644 --- a/continew-admin-common/src/main/java/top/charles7c/continew/admin/common/constant/SysConstants.java +++ b/continew-admin-common/src/main/java/top/charles7c/continew/admin/common/constant/SysConstants.java @@ -46,11 +46,6 @@ public class SysConstants { */ public static final String ALL_PERMISSION = StringConstants.ASTERISK; - /** - * 默认密码 - */ - public static final String DEFAULT_PASSWORD = "123456"; - /** * 账号登录 URI */ diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/req/UserPasswordResetReq.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/req/UserPasswordResetReq.java new file mode 100644 index 00000000..40e0e7ef --- /dev/null +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/req/UserPasswordResetReq.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package top.charles7c.continew.admin.system.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 用户密码重置信息 + * + * @author Charles7c + * @since 2024/2/2 22:50 + */ +@Data +@Schema(description = "用户密码重置信息") +public class UserPasswordResetReq implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 新密码(加密) + */ + @Schema(description = "新密码(加密)", example = "Gzc78825P5baH190lRuZFb9KJxRt/psN2jiyOMPoc5WRcCvneCwqDm3Q33BZY56EzyyVy7vQu7jQwYTK4j1+5w==") + @NotBlank(message = "新密码不能为空") + private String newPassword; +} diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/req/UserReq.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/req/UserReq.java index 6d88edc8..754caef5 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/req/UserReq.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/model/req/UserReq.java @@ -28,6 +28,7 @@ import top.charles7c.continew.admin.common.constant.RegexConstants; import top.charles7c.continew.admin.common.enums.DisEnableStatusEnum; import top.charles7c.continew.admin.common.enums.GenderEnum; import top.charles7c.continew.starter.extension.crud.model.req.BaseReq; +import top.charles7c.continew.starter.extension.crud.util.ValidateGroup; import java.io.Serial; import java.util.List; @@ -61,6 +62,13 @@ public class UserReq extends BaseReq { @Pattern(regexp = RegexConstants.GENERAL_NAME, message = "昵称长度为 2 到 30 位,可以包含中文、字母、数字、下划线,短横线") private String nickname; + /** + * 密码(加密) + */ + @Schema(description = "密码(加密)", example = "E7c72TH+LDxKTwavjM99W1MdI9Lljh79aPKiv3XB9MXcplhm7qJ1BJCj28yaflbdVbfc366klMtjLIWQGqb0qw==") + @NotBlank(message = "密码不能为空", groups = ValidateGroup.Crud.Add.class) + private String password; + /** * 邮箱 */ diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/UserService.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/UserService.java index fbe01841..cf90ef3f 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/UserService.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/UserService.java @@ -20,6 +20,7 @@ import org.springframework.web.multipart.MultipartFile; import top.charles7c.continew.admin.system.model.entity.UserDO; import top.charles7c.continew.admin.system.model.query.UserQuery; import top.charles7c.continew.admin.system.model.req.UserBasicInfoUpdateReq; +import top.charles7c.continew.admin.system.model.req.UserPasswordResetReq; import top.charles7c.continew.admin.system.model.req.UserReq; import top.charles7c.continew.admin.system.model.req.UserRoleUpdateReq; import top.charles7c.continew.admin.system.model.resp.UserDetailResp; @@ -92,9 +93,10 @@ public interface UserService extends BaseService<UserResp, UserDetailResp, UserQ /** * 重置密码 * - * @param id ID + * @param req 重置信息 + * @param id ID */ - void resetPassword(Long id); + void resetPassword(UserPasswordResetReq req, Long id); /** * 修改角色 diff --git a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/UserServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/UserServiceImpl.java index d27d73f5..70d6c0ec 100644 --- a/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/UserServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/UserServiceImpl.java @@ -33,13 +33,13 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import top.charles7c.continew.admin.common.constant.CacheConstants; -import top.charles7c.continew.admin.common.constant.SysConstants; import top.charles7c.continew.admin.common.enums.DisEnableStatusEnum; import top.charles7c.continew.admin.common.util.helper.LoginHelper; import top.charles7c.continew.admin.system.mapper.UserMapper; import top.charles7c.continew.admin.system.model.entity.UserDO; import top.charles7c.continew.admin.system.model.query.UserQuery; import top.charles7c.continew.admin.system.model.req.UserBasicInfoUpdateReq; +import top.charles7c.continew.admin.system.model.req.UserPasswordResetReq; import top.charles7c.continew.admin.system.model.req.UserReq; import top.charles7c.continew.admin.system.model.req.UserRoleUpdateReq; import top.charles7c.continew.admin.system.model.resp.UserDetailResp; @@ -50,8 +50,8 @@ import top.charles7c.continew.admin.system.service.UserRoleService; import top.charles7c.continew.admin.system.service.UserService; import top.charles7c.continew.starter.core.constant.StringConstants; import top.charles7c.continew.starter.core.util.validate.CheckUtils; -import top.charles7c.continew.starter.extension.crud.service.impl.BaseServiceImpl; import top.charles7c.continew.starter.extension.crud.service.CommonUserService; +import top.charles7c.continew.starter.extension.crud.service.impl.BaseServiceImpl; import java.time.LocalDateTime; import java.util.Collection; @@ -92,16 +92,13 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserRes String phone = req.getPhone(); CheckUtils.throwIf(StrUtil.isNotBlank(phone) && this.isPhoneExists(phone, null), "新增失败,[{}] 已存在", phone); req.setStatus(DisEnableStatusEnum.ENABLE); + req.setPassword(passwordEncoder.encode(req.getPassword())); } @Override protected void afterAdd(UserReq req, UserDO user) { Long userId = user.getId(); - baseMapper.lambdaUpdate() - .set(UserDO::getPassword, passwordEncoder.encode(SysConstants.DEFAULT_PASSWORD)) - .set(UserDO::getPwdResetTime, LocalDateTime.now()) - .eq(UserDO::getId, userId) - .update(); + baseMapper.lambdaUpdate().set(UserDO::getPwdResetTime, LocalDateTime.now()).eq(UserDO::getId, userId).update(); // 保存用户和角色关联 userRoleService.add(req.getRoleIds(), userId); } @@ -166,9 +163,8 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserRes @Transactional(rollbackFor = Exception.class) public String uploadAvatar(MultipartFile avatarFile, Long id) { String avatarImageType = FileNameUtil.extName(avatarFile.getOriginalFilename()); - CheckUtils.throwIf(!StrUtil - .equalsAnyIgnoreCase(avatarImageType, avatarSupportSuffix), "头像仅支持 {} 格式的图片", String - .join(StringConstants.CHINESE_COMMA, avatarSupportSuffix)); + CheckUtils.throwIf(!StrUtil.equalsAnyIgnoreCase(avatarImageType, avatarSupportSuffix), "头像仅支持 {} 格式的图片", String + .join(StringConstants.CHINESE_COMMA, avatarSupportSuffix)); // 上传新头像 UserDO user = super.getById(id); FileInfo fileInfo = fileService.upload(avatarFile); @@ -234,9 +230,9 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserRes } @Override - public void resetPassword(Long id) { + public void resetPassword(UserPasswordResetReq req, Long id) { UserDO user = super.getById(id); - user.setPassword(passwordEncoder.encode(SysConstants.DEFAULT_PASSWORD)); + user.setPassword(passwordEncoder.encode(req.getNewPassword())); user.setPwdResetTime(LocalDateTime.now()); baseMapper.updateById(user); } diff --git a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/auth/SocialAuthController.java b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/auth/SocialAuthController.java index 11d819a3..d5d77fea 100644 --- a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/auth/SocialAuthController.java +++ b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/auth/SocialAuthController.java @@ -63,7 +63,7 @@ public class SocialAuthController { @Operation(summary = "三方账号登录授权", description = "三方账号登录授权") @Parameter(name = "source", description = "来源", example = "gitee", in = ParameterIn.PATH) @GetMapping("/{source}") - public R authorize(@PathVariable String source) { + public R<String> authorize(@PathVariable String source) { AuthRequest authRequest = this.getAuthRequest(source); return R.ok("操作成功", authRequest.authorize(AuthStateUtils.createState())); } diff --git a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/common/CaptchaController.java b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/common/CaptchaController.java index aa7eb080..b5c3aac7 100644 --- a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/common/CaptchaController.java +++ b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/common/CaptchaController.java @@ -105,7 +105,7 @@ public class CaptchaController { @Operation(summary = "获取邮箱验证码", description = "发送验证码到指定邮箱") @GetMapping("/mail") - public R getMailCaptcha(@NotBlank(message = "邮箱不能为空") @Pattern(regexp = RegexPool.EMAIL, message = "邮箱格式错误") String email) throws MessagingException { + public R<Void> getMailCaptcha(@NotBlank(message = "邮箱不能为空") @Pattern(regexp = RegexPool.EMAIL, message = "邮箱格式错误") String email) throws MessagingException { String limitKeyPrefix = CacheConstants.LIMIT_KEY_PREFIX; String captchaKeyPrefix = CacheConstants.CAPTCHA_KEY_PREFIX; String limitCaptchaKey = limitKeyPrefix + captchaKeyPrefix + email; @@ -129,9 +129,9 @@ public class CaptchaController { @Operation(summary = "获取短信验证码", description = "发送验证码到指定手机号") @GetMapping("/sms") - public R getSmsCaptcha(@NotBlank(message = "手机号不能为空") @Pattern(regexp = RegexPool.MOBILE, message = "手机号格式错误") String phone, - CaptchaVO captchaReq, - HttpServletRequest request) { + public R<Void> getSmsCaptcha(@NotBlank(message = "手机号不能为空") @Pattern(regexp = RegexPool.MOBILE, message = "手机号格式错误") String phone, + CaptchaVO captchaReq, + HttpServletRequest request) { // 行为验证码校验 ResponseModel verificationRes = captchaService.verification(captchaReq); ValidationUtils.throwIfNotEqual(verificationRes.getRepCode(), RepCodeEnum.SUCCESS.getCode(), verificationRes diff --git a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/monitor/OnlineUserController.java b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/monitor/OnlineUserController.java index 7f609903..72cc262b 100644 --- a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/monitor/OnlineUserController.java +++ b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/monitor/OnlineUserController.java @@ -62,7 +62,7 @@ public class OnlineUserController { @Parameter(name = "token", description = "令牌", example = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOjEsInJuU3RyIjoiTUd6djdyOVFoeHEwdVFqdFAzV3M5YjVJRzh4YjZPSEUifQ.7q7U3ouoN7WPhH2kUEM7vPe5KF3G_qavSG-vRgIxKvE", in = ParameterIn.PATH) @SaCheckPermission("monitor:online:user:delete") @DeleteMapping("/{token}") - public R kickout(@PathVariable String token) { + public R<Void> kickout(@PathVariable String token) { String currentToken = StpUtil.getTokenValue(); CheckUtils.throwIfEqual(token, currentToken, "不能强退自己"); StpUtil.kickoutByTokenValue(token); diff --git a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/AnnouncementController.java b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/AnnouncementController.java index e2b61dff..9204115e 100644 --- a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/AnnouncementController.java +++ b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/AnnouncementController.java @@ -56,8 +56,8 @@ public class AnnouncementController extends BaseController<AnnouncementService, @Override @SaCheckPermission("system:announcement:update") - public R update(@Validated(ValidateGroup.Crud.Update.class) @RequestBody AnnouncementReq req, - @PathVariable Long id) { + public R<Void> update(@Validated(ValidateGroup.Crud.Update.class) @RequestBody AnnouncementReq req, + @PathVariable Long id) { this.checkTime(req); return super.update(req, id); } diff --git a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/MenuController.java b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/MenuController.java index b5558f8a..bc3a93e3 100644 --- a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/MenuController.java +++ b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/MenuController.java @@ -55,7 +55,7 @@ public class MenuController extends BaseController<MenuService, MenuResp, MenuRe @Override @SaCheckPermission("system:menu:update") - public R update(@Validated(ValidateGroup.Crud.Update.class) @RequestBody MenuReq req, @PathVariable Long id) { + public R<Void> update(@Validated(ValidateGroup.Crud.Update.class) @RequestBody MenuReq req, @PathVariable Long id) { this.checkPath(req); return super.update(req, id); } diff --git a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/MessageController.java b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/MessageController.java index dc3742e3..91106e93 100644 --- a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/MessageController.java +++ b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/MessageController.java @@ -61,7 +61,7 @@ public class MessageController { @Operation(summary = "删除数据", description = "删除数据") @Parameter(name = "ids", description = "ID 列表", example = "1,2", in = ParameterIn.PATH) @DeleteMapping("/{ids}") - public R delete(@PathVariable List<Long> ids) { + public R<Void> delete(@PathVariable List<Long> ids) { baseService.delete(ids); return R.ok("删除成功"); } @@ -69,7 +69,7 @@ public class MessageController { @Operation(summary = "标记已读", description = "将消息标记为已读状态") @Parameter(name = "ids", description = "消息ID列表", example = "1,2", in = ParameterIn.QUERY) @PatchMapping("/read") - public R readMessage(@RequestParam(required = false) List<Long> ids) { + public R<Void> readMessage(@RequestParam(required = false) List<Long> ids) { messageUserService.readMessage(ids); return R.ok(); } diff --git a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/OptionController.java b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/OptionController.java index 2650952f..8c6b2d90 100644 --- a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/OptionController.java +++ b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/OptionController.java @@ -59,7 +59,7 @@ public class OptionController { @Operation(summary = "修改参数", description = "修改参数") @SaCheckPermission("system:config:update") @PatchMapping - public R update(@Validated @RequestBody List<OptionReq> req) { + public R<Void> update(@Validated @RequestBody List<OptionReq> req) { optionService.update(req); return R.ok(); } @@ -67,7 +67,7 @@ public class OptionController { @Operation(summary = "重置参数", description = "重置参数") @SaCheckPermission("system:config:reset") @PatchMapping("/value") - public R resetValue(@Validated @RequestBody OptionResetValueReq req) { + public R<Void> resetValue(@Validated @RequestBody OptionResetValueReq req) { optionService.resetValue(req); return R.ok(); } diff --git a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/UserCenterController.java b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/UserCenterController.java index 4afa4c6a..f44b20bc 100644 --- a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/UserCenterController.java +++ b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/UserCenterController.java @@ -80,14 +80,14 @@ public class UserCenterController { @Operation(summary = "修改基础信息", description = "修改用户基础信息") @PatchMapping("/basic/info") - public R updateBasicInfo(@Validated @RequestBody UserBasicInfoUpdateReq req) { + public R<Void> updateBasicInfo(@Validated @RequestBody UserBasicInfoUpdateReq req) { userService.updateBasicInfo(req, LoginHelper.getUserId()); return R.ok("修改成功"); } @Operation(summary = "修改密码", description = "修改用户登录密码") @PatchMapping("/password") - public R updatePassword(@Validated @RequestBody UserPasswordUpdateReq updateReq) { + public R<Void> updatePassword(@Validated @RequestBody UserPasswordUpdateReq updateReq) { String rawOldPassword = ExceptionUtils.exToNull(() -> SecureUtils.decryptByRsaPrivateKey(updateReq .getOldPassword())); ValidationUtils.throwIfNull(rawOldPassword, "当前密码解密失败"); @@ -97,12 +97,12 @@ public class UserCenterController { ValidationUtils.throwIf(!ReUtil .isMatch(RegexConstants.PASSWORD, rawNewPassword), "密码长度为 6 到 32 位,可以包含字母、数字、下划线,特殊字符,同时包含字母和数字"); userService.updatePassword(rawOldPassword, rawNewPassword, LoginHelper.getUserId()); - return R.ok("修改成功"); + return R.ok("修改成功,请牢记你的新密码"); } @Operation(summary = "修改手机号", description = "修改手机号") @PatchMapping("/phone") - public R updatePhone(@Validated @RequestBody UserPhoneUpdateReq updateReq) { + public R<Void> updatePhone(@Validated @RequestBody UserPhoneUpdateReq updateReq) { String rawCurrentPassword = ExceptionUtils.exToNull(() -> SecureUtils.decryptByRsaPrivateKey(updateReq .getCurrentPassword())); ValidationUtils.throwIfBlank(rawCurrentPassword, "当前密码解密失败"); @@ -117,7 +117,7 @@ public class UserCenterController { @Operation(summary = "修改邮箱", description = "修改用户邮箱") @PatchMapping("/email") - public R updateEmail(@Validated @RequestBody UserEmailUpdateRequest updateReq) { + public R<Void> updateEmail(@Validated @RequestBody UserEmailUpdateRequest updateReq) { String rawCurrentPassword = ExceptionUtils.exToNull(() -> SecureUtils.decryptByRsaPrivateKey(updateReq .getCurrentPassword())); ValidationUtils.throwIfBlank(rawCurrentPassword, "当前密码解密失败"); @@ -147,7 +147,7 @@ public class UserCenterController { @Operation(summary = "绑定三方账号", description = "绑定三方账号") @Parameter(name = "source", description = "来源", example = "gitee", in = ParameterIn.PATH) @PostMapping("/social/{source}") - public R bindSocial(@PathVariable String source, @RequestBody AuthCallback callback) { + public R<Void> bindSocial(@PathVariable String source, @RequestBody AuthCallback callback) { AuthRequest authRequest = authRequestFactory.get(source); AuthResponse<AuthUser> response = authRequest.login(callback); ValidationUtils.throwIf(!response.ok(), response.getMsg()); @@ -159,7 +159,7 @@ public class UserCenterController { @Operation(summary = "解绑三方账号", description = "解绑三方账号") @Parameter(name = "source", description = "来源", example = "gitee", in = ParameterIn.PATH) @DeleteMapping("/social/{source}") - public R unbindSocial(@PathVariable String source) { + public R<Void> unbindSocial(@PathVariable String source) { userSocialService.deleteBySourceAndUserId(source, LoginHelper.getUserId()); return R.ok("解绑成功"); } diff --git a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/UserController.java b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/UserController.java index 35416124..a1b3619e 100644 --- a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/UserController.java +++ b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/system/UserController.java @@ -16,26 +16,28 @@ package top.charles7c.continew.admin.webapi.system; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.ReUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.tags.Tag; - import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; - -import cn.dev33.satoken.annotation.SaCheckPermission; - -import top.charles7c.continew.admin.common.constant.SysConstants; +import top.charles7c.continew.admin.common.constant.RegexConstants; +import top.charles7c.continew.admin.common.util.SecureUtils; import top.charles7c.continew.admin.system.model.query.UserQuery; +import top.charles7c.continew.admin.system.model.req.UserPasswordResetReq; import top.charles7c.continew.admin.system.model.req.UserReq; import top.charles7c.continew.admin.system.model.req.UserRoleUpdateReq; import top.charles7c.continew.admin.system.model.resp.UserDetailResp; import top.charles7c.continew.admin.system.model.resp.UserResp; import top.charles7c.continew.admin.system.service.UserService; +import top.charles7c.continew.starter.core.util.ExceptionUtils; +import top.charles7c.continew.starter.core.util.validate.ValidationUtils; import top.charles7c.continew.starter.extension.crud.annotation.CrudRequestMapping; import top.charles7c.continew.starter.extension.crud.controller.BaseController; import top.charles7c.continew.starter.extension.crud.util.ValidateGroup; @@ -56,24 +58,34 @@ public class UserController extends BaseController<UserService, UserResp, UserDe @Override @SaCheckPermission("system:user:add") public R<Long> add(@Validated(ValidateGroup.Crud.Add.class) @RequestBody UserReq req) { + String rawPassword = ExceptionUtils.exToNull(() -> SecureUtils.decryptByRsaPrivateKey(req.getPassword())); + ValidationUtils.throwIfNull(rawPassword, "密码解密失败"); + ValidationUtils.throwIf(!ReUtil + .isMatch(RegexConstants.PASSWORD, rawPassword), "密码长度为 6 到 32 位,可以包含字母、数字、下划线,特殊字符,同时包含字母和数字"); + req.setPassword(rawPassword); Long id = baseService.add(req); - return R.ok(String.format("新增成功,请牢记默认密码:%s", SysConstants.DEFAULT_PASSWORD), id); + return R.ok("新增成功", id); } @Operation(summary = "重置密码", description = "重置用户登录密码为默认密码") @Parameter(name = "id", description = "ID", example = "1", in = ParameterIn.PATH) @SaCheckPermission("system:user:password:reset") @PatchMapping("/{id}/password") - public R resetPassword(@PathVariable Long id) { - baseService.resetPassword(id); - return R.ok(String.format("重置密码成功,请牢记默认密码:%s", SysConstants.DEFAULT_PASSWORD)); + public R<Void> resetPassword(@Validated @RequestBody UserPasswordResetReq req, @PathVariable Long id) { + String rawNewPassword = ExceptionUtils.exToNull(() -> SecureUtils.decryptByRsaPrivateKey(req.getNewPassword())); + ValidationUtils.throwIfNull(rawNewPassword, "新密码解密失败"); + ValidationUtils.throwIf(!ReUtil + .isMatch(RegexConstants.PASSWORD, rawNewPassword), "密码长度为 6 到 32 位,可以包含字母、数字、下划线,特殊字符,同时包含字母和数字"); + req.setNewPassword(rawNewPassword); + baseService.resetPassword(req, id); + return R.ok("重置密码成功"); } @Operation(summary = "分配角色", description = "为用户新增或移除角色") @Parameter(name = "id", description = "ID", example = "1", in = ParameterIn.PATH) @SaCheckPermission("system:user:role:update") @PatchMapping("/{id}/role") - public R updateRole(@Validated @RequestBody UserRoleUpdateReq updateReq, @PathVariable Long id) { + public R<Void> updateRole(@Validated @RequestBody UserRoleUpdateReq updateReq, @PathVariable Long id) { baseService.updateRole(updateReq, id); return R.ok("分配成功"); } diff --git a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/tool/GeneratorController.java b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/tool/GeneratorController.java index 0c35a696..fe5b1648 100644 --- a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/tool/GeneratorController.java +++ b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/tool/GeneratorController.java @@ -89,7 +89,7 @@ public class GeneratorController { @Parameter(name = "tableName", description = "表名称", required = true, example = "sys_user", in = ParameterIn.PATH) @SaCheckPermission("tool:generator:list") @PostMapping("/config/{tableName}") - public R saveConfig(@Validated @RequestBody GenConfigReq req, @PathVariable String tableName) { + public R<Void> saveConfig(@Validated @RequestBody GenConfigReq req, @PathVariable String tableName) { generatorService.saveConfig(req, tableName); return R.ok("保存成功"); } @@ -106,7 +106,7 @@ public class GeneratorController { @Parameter(name = "tableName", description = "表名称", required = true, example = "sys_user", in = ParameterIn.PATH) @SaCheckPermission("tool:generator:list") @PostMapping("/{tableName}") - public R generate(@PathVariable String tableName) { + public R<Void> generate(@PathVariable String tableName) { ValidationUtils.throwIf(projectProperties.isProduction(), "仅支持在开发环境生成代码"); generatorService.generate(tableName); return R.ok("生成成功,请查看生成代码是否正确"); diff --git a/continew-admin-webapi/src/main/resources/config/application-dev.yml b/continew-admin-webapi/src/main/resources/config/application-dev.yml index 4abb490c..279aff47 100644 --- a/continew-admin-webapi/src/main/resources/config/application-dev.yml +++ b/continew-admin-webapi/src/main/resources/config/application-dev.yml @@ -258,8 +258,4 @@ spring.servlet: max-request-size: 20MB ## 头像支持格式配置 avatar: - support-suffix: - - jpg - - jpeg - - png - - gif + support-suffix: jpg,jpeg,png,gif diff --git a/continew-admin-webapi/src/main/resources/config/application-prod.yml b/continew-admin-webapi/src/main/resources/config/application-prod.yml index 2edaaf20..59989037 100644 --- a/continew-admin-webapi/src/main/resources/config/application-prod.yml +++ b/continew-admin-webapi/src/main/resources/config/application-prod.yml @@ -258,8 +258,4 @@ spring.servlet: max-request-size: 20MB ## 头像支持格式配置 avatar: - support-suffix: - - jpg - - jpeg - - png - - gif + support-suffix: jpg,jpeg,png,gif