Explorar o código

User 的 password 字段修改为 encodedPassword

reghao %!s(int64=2) %!d(string=hai) anos
pai
achega
8eb634bff8

+ 3 - 2
manager/src/main/java/cn/reghao/devops/manager/account/controller/AccountProfileController.java

@@ -2,6 +2,7 @@ package cn.reghao.devops.manager.account.controller;
 
 import cn.reghao.devops.manager.account.model.dto.UpdatePasswordDto;
 import cn.reghao.devops.manager.account.model.dto.CreateAccountDto;
+import cn.reghao.jutil.jdk.result.Result;
 import cn.reghao.jutil.jdk.result.WebResult;
 import cn.reghao.devops.manager.account.model.dto.AccountProfile;
 import cn.reghao.devops.manager.account.model.dto.AccountRole;
@@ -35,8 +36,8 @@ public class AccountProfileController {
     @ApiOperation(value = "创建用户")
     @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
     public String createUser(@Validated CreateAccountDto createAccountDto) {
-        accountService.createAccount(createAccountDto);
-        return WebResult.success();
+        Result result = accountService.createAccount(createAccountDto);
+        return WebResult.result(result);
     }
 
     @PreAuthorize("hasRole('ROLE_ADMIN')")

+ 5 - 14
manager/src/main/java/cn/reghao/devops/manager/account/model/po/User.java

@@ -32,7 +32,7 @@ public class User extends BaseEntity implements UserDetails {
     @Column(nullable = false)
     @JsonIgnore
     @NotBlank(message = "密码不能为空白字符串")
-    private String password;
+    private String encodedPassword;
     @Column(nullable = false)
     private String salt;
     private LocalDateTime createAt;
@@ -50,21 +50,12 @@ public class User extends BaseEntity implements UserDetails {
     private String email;
     private Integer gender;
 
-    public User(String username, String password, Set<String> roles) {
+    public User(String username, String encodedPassword, String salt, Set<String> roles) {
         this.username = username;
-        this.password = password;
-        this.role = roles;
-        this.screenName = username;
-        this.avatarUrl = "/imgs/avatar.jpg";
-        this.gender = 2;
-    }
-
-    public User(String username, String password, String salt) {
-        this.username = username;
-        this.password = password;
+        this.encodedPassword = encodedPassword;
         this.salt = salt;
         this.createAt = LocalDateTime.now();
-        this.role = Set.of("ROLE_ADMIN");
+        this.role = roles;
         this.enabled = true;
         this.locked = false;
         this.screenName = username;
@@ -79,7 +70,7 @@ public class User extends BaseEntity implements UserDetails {
 
     @Override
     public String getPassword() {
-        return password;
+        return encodedPassword;
     }
 
     /**

+ 2 - 1
manager/src/main/java/cn/reghao/devops/manager/account/service/AccountService.java

@@ -3,6 +3,7 @@ package cn.reghao.devops.manager.account.service;
 import cn.reghao.devops.manager.account.model.dto.CreateAccountDto;
 import cn.reghao.devops.manager.account.model.dto.AccountProfile;
 import cn.reghao.devops.manager.account.model.dto.AccountRole;
+import cn.reghao.jutil.jdk.result.Result;
 
 /**
  * @author reghao
@@ -10,7 +11,7 @@ import cn.reghao.devops.manager.account.model.dto.AccountRole;
  */
 public interface AccountService {
     void initAccount();
-    void createAccount(CreateAccountDto createAccountDto);
+    Result createAccount(CreateAccountDto createAccountDto);
     void updateAccountPassword(Integer userId, String newPassword);
     void updateAccountProfile(AccountProfile accountProfile);
     void updateAccountRole(AccountRole accountRole);

+ 17 - 13
manager/src/main/java/cn/reghao/devops/manager/account/service/impl/AccountServiceImpl.java

@@ -6,6 +6,7 @@ import cn.reghao.devops.manager.account.model.constant.RoleType;
 import cn.reghao.devops.manager.account.model.dto.CreateAccountDto;
 import cn.reghao.devops.manager.account.model.po.Role;
 import cn.reghao.devops.manager.account.service.AccountService;
+import cn.reghao.jutil.jdk.result.Result;
 import cn.reghao.jutil.jdk.security.Cryptor;
 import cn.reghao.jutil.jdk.security.Md5Cryptor;
 import cn.reghao.jutil.jdk.security.RandomString;
@@ -61,28 +62,30 @@ public class AccountServiceImpl implements AccountService {
     }
 
     @Override
-    public void createAccount(CreateAccountDto createAccountDto) {
+    public Result createAccount(CreateAccountDto createAccountDto) {
+        int roleId = createAccountDto.getRoleId();
+        Role role = roleRepository.findById(roleId).orElse(null);
+        if (role == null) {
+            return Result.fail("role 不存在");
+        }
+
         String username = createAccountDto.getUsername();
         User user = userRepository.findByUsername(username);
         if (user == null) {
             String password = createAccountDto.getPassword();
             String salt = RandomString.getSalt(64);
-            String encodedPasswd = passwordEncoder.encode(password + salt);
+            String encodedPassword = passwordEncoder.encode(password + salt);
 
-            user = new User(username, encodedPasswd, salt);
+            user = new User(username, encodedPassword, salt, Set.of(role.getName()));
             userRepository.save(user);
+            return Result.success();
         }
-    }
 
-    private void setEncryptPassword(User user) {
-        String password = user.getPassword();
-        String salt = RandomString.getSalt(64);
-        String encryptPwd = cryptor.encrypt(password + salt);
-        user.setPassword(encryptPwd);
-        user.setSalt(salt);
+        String errMsg = String.format("帐号 %s 已存在", username);
+        return Result.fail(errMsg);
+
     }
 
-    // TODO 密码修改后是否应该清除用户 session?
     @Override
     public void updateAccountPassword(Integer userId, String newPassword) {
         User userEntity = userRepository.findById(userId).orElse(null);
@@ -90,8 +93,9 @@ public class AccountServiceImpl implements AccountService {
             return;
         }
 
-        userEntity.setPassword(newPassword);
-        setEncryptPassword(userEntity);
+        String salt = RandomString.getSalt(64);
+        String encodedPassword = cryptor.encrypt(newPassword + salt);
+        userEntity.setEncodedPassword(encodedPassword);
         userRepository.save(userEntity);
     }