Browse Source

带验证的修改密码和不带验证的修改密码

buzhanyi 7 months ago
parent
commit
3853c1a306

+ 1 - 2
application-webadmin/src/main/java/com/ankaibei/workFlow/webadmin/upms/controller/LoginController.java

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.ankaibei.workFlow.webadmin.upms.dto.SysUserDto;
 import com.ankaibei.workflow.api.LoginApi;
 import com.github.xiaoymin.knife4j.annotations.ApiSupport;
 import io.swagger.annotations.Api;
@@ -211,8 +212,6 @@ public class LoginController {
     /**
      * 用户修改自己的密码。
      *
-     * @param oldPass 原有密码。
-     * @param newPass 新密码。
      * @return 应答结果对象。
      */
     @PostMapping("/changePassword")

+ 52 - 3
application-webadmin/src/main/java/com/ankaibei/workFlow/webadmin/upms/controller/SysUserController.java

@@ -28,6 +28,8 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.net.URLDecoder;
+import java.nio.charset.StandardCharsets;
 import java.util.*;
 
 /**
@@ -56,7 +58,7 @@ public class SysUserController {
     /**
      * 新增用户操作。
      *
-     * @param sysUserDto           新增用户对象。
+     * @param sysUserDto 新增用户对象。
      * @return 应答结果对象,包含新增用户的主键Id。
      */
     @ApiOperationSupport(ignoreParameters = {
@@ -101,7 +103,7 @@ public class SysUserController {
     /**
      * 更新用户操作。
      *
-     * @param sysUserDto           更新用户对象。
+     * @param sysUserDto 更新用户对象。
      * @return 应答结果对象。
      */
     @ApiOperationSupport(ignoreParameters = {
@@ -159,7 +161,54 @@ public class SysUserController {
             return ResMsg.error(CodeEnum.ARGUMENT_NULL_EXIST.getCode(), CodeEnum.ARGUMENT_NULL_EXIST.toString());
         }
         if (!sysUserService.changePassword(userId + "", appConfig.getDefaultUserPassword())) {
-            return ResMsg.error(CodeEnum.DATA_NOT_EXIST.getCode(), CodeEnum.DATA_NOT_EXIST.toString());
+            return ResMsg.error(CodeEnum.DATA_NOT_EXIST);
+        }
+        return new ResMsg(CodeEnum.OK);
+    }
+
+    /**
+     * 修改密码操作。
+     *
+     * @param sysUserDto 指定用户
+     * @return 应答结果对象。
+     */
+    @PostMapping("/updatePassword")
+    public ResMsg updatePassword(@RequestBody SysUserDto sysUserDto) {
+        if (MyCommonUtil.existBlankArgument(sysUserDto.getUserId())) {
+            return ResMsg.error(CodeEnum.ARGUMENT_NULL_EXIST);
+        }
+        if (!sysUserService.changePassword(sysUserDto.getUserId() + "", sysUserDto.getPassword())) {
+            return ResMsg.error(CodeEnum.DATA_NOT_EXIST);
+        }
+        return new ResMsg(CodeEnum.OK);
+    }
+
+    /**
+     * 用户修改自己的密码 (验证新旧密码)
+     *
+     * @return 应答结果对象。
+     */
+    @PostMapping("/changePassword")
+    public ResMsg changePassword(@RequestBody SysUserDto sysUserDto) throws Exception {
+        if (MyCommonUtil.existBlankArgument(sysUserDto.getPassword(), sysUserDto.getOldPassword())) {
+            return ResMsg.error(CodeEnum.ARGUMENT_NULL_EXIST);
+        }
+        TokenData tokenData = TokenData.takeFromRequest();
+        SysUser user = sysUserService.getById(tokenData.getUserId());
+        //String oldPass = URLDecoder.decode(sysUserDto.getOldPassword(), StandardCharsets.UTF_8.name());
+        // NOTE: 第一次使用时,请务必阅读ApplicationConstant.PRIVATE_KEY的代码注释。
+        // 执行RsaUtil工具类中的main函数,可以生成新的公钥和私钥。
+        //oldPass = RsaUtil.encrypt(oldPass, ApplicationConstant.PUBLIC_KEY);
+        if (user == null) {
+            return ResMsg.error(CodeEnum.ACCOUNT_NO_PASSWORD_ERROR);
+        }
+        if (!passwordEncoder.matches(sysUserDto.getOldPassword(), user.getPassword())) {
+            return ResMsg.error(CodeEnum.OLD_PWD_ERROR);
+        }
+        String newPass = URLDecoder.decode(sysUserDto.getPassword(), StandardCharsets.UTF_8.name());
+        newPass = RsaUtil.encrypt(newPass, ApplicationConstant.PUBLIC_KEY);
+        if (!sysUserService.changePassword(tokenData.getUserId(), newPass)) {
+            return ResMsg.error(CodeEnum.USER_NOT_FIND);
         }
         return new ResMsg(CodeEnum.OK);
     }

+ 5 - 0
application-webadmin/src/main/java/com/ankaibei/workFlow/webadmin/upms/dto/SysUserDto.java

@@ -40,6 +40,11 @@ public class SysUserDto extends MyPageParam {
     @NotBlank(message = "数据验证失败,登录用户名不能为空!")
     private String loginName;
 
+    /**
+     * 用户密码。
+     */
+    @ApiModelProperty(value = "用户密码(旧密码)")
+    private String oldPassword;
     /**
      * 用户密码。
      */

+ 10 - 0
common/common-core/src/main/java/com/ankaibei/workFlow/common/core/object/ResMsg.java

@@ -95,6 +95,16 @@ public class ResMsg<T> implements Serializable {
         return new ResMsg(enumCode, enumMsg, null);
     }
 
+    /**
+     * 创建错误对象。
+     * 如果返回错误对象,enumCode 和 enumMsg 分别取自于参数 CodeEnum 的 name() 和 getErrorMessage()。
+     *
+     * @return 返回创建的ResponseResult实例对象
+     */
+    public static <T> ResMsg error(CodeEnum CodeEnum) {
+        return new ResMsg(CodeEnum);
+    }
+
     public static ResMsg newInstance(CodeEnum CodeEnum) {
         return new ResMsg(CodeEnum, null);
     }