Skip to content

Commit cc50ca3

Browse files
committed
feat(admin): 增加用户管理功能并优化登录验证
- 登录接口增加邮箱格式和密码强度校验 - 添加用户信息接口,支持头像上传和密码加密 - 用户管理页面增加添加用户功能 - 优化用户信息更新逻辑,支持头像文件大小校验 - 增加用户信息实体类字段和相关服务方法 Signed-off-by: LiggMax <wenzhouli06@gmail.com>
1 parent 0720b10 commit cc50ca3

5 files changed

Lines changed: 53 additions & 7 deletions

File tree

web/api-admin/src/main/java/com/ligg/apiadmin/controller/AdminAuthController.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
import com.ligg.common.utils.Response;
1313
import io.swagger.v3.oas.annotations.media.Schema;
1414
import io.swagger.v3.oas.annotations.tags.Tag;
15+
import jakarta.validation.constraints.Email;
1516
import jakarta.validation.constraints.NotNull;
17+
import jakarta.validation.constraints.Pattern;
1618
import lombok.RequiredArgsConstructor;
1719
import org.springframework.web.bind.annotation.PostMapping;
1820
import org.springframework.web.bind.annotation.RequestMapping;
@@ -53,9 +55,9 @@ public Response<String> register(@Schema(description = "账号") @NotNull String
5355
* 登录
5456
*/
5557
@PostMapping("/login")
56-
public Response<String> login(@Schema(description = "账号") @RequestParam @NotNull String account,
57-
@Schema(description = "密码") @RequestParam @NotNull String password) {
58-
UserEntity userInfo = userService.getUserInfoByEmail(account);
58+
public Response<String> login(@Schema(description = "邮箱") @RequestParam @NotNull @Email(message = "邮箱格式错误") String email,
59+
@Schema(description = "密码") @Pattern(regexp = "^(?=.*[a-zA-Z])(?=.*\\d)[a-zA-Z\\d]{6,30}$", message = "密码格式错误") @RequestParam @NotNull String password) {
60+
UserEntity userInfo = userService.getUserInfoByEmail(email);
5961
if (userInfo == null || !BCryptUtil.verify(password, userInfo.getPassword())) {
6062
return Response.error(BusinessStates.FORBIDDEN, "账号或密码错误");
6163
}

web/api-admin/src/main/java/com/ligg/apiadmin/controller/UserManagementController.java

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,23 @@
55
import com.ligg.apiadmin.service.UserManagementService;
66
import com.ligg.common.constants.Constant;
77
import com.ligg.common.enums.BusinessStates;
8+
import com.ligg.common.module.entity.UserEntity;
89
import com.ligg.common.module.vo.PageVo;
910
import com.ligg.common.service.FileService;
11+
import com.ligg.common.service.UserService;
12+
import com.ligg.common.utils.BCryptUtil;
1013
import com.ligg.common.utils.Response;
1114
import io.swagger.v3.oas.annotations.Operation;
1215
import io.swagger.v3.oas.annotations.tags.Tag;
1316
import jakarta.validation.constraints.NotNull;
1417
import lombok.RequiredArgsConstructor;
18+
import org.springframework.beans.BeanUtils;
1519
import org.springframework.validation.annotation.Validated;
1620
import org.springframework.web.bind.annotation.*;
1721
import org.springframework.web.multipart.MultipartFile;
1822

23+
import java.time.LocalDateTime;
24+
1925
/**
2026
* @Author Ligg
2127
* @Time 2025/10/28
@@ -29,6 +35,8 @@ public class UserManagementController {
2935

3036
private final FileService fileService;
3137

38+
private final UserService userService;
39+
3240
private final UserManagementService userManagementService;
3341

3442
/**
@@ -39,17 +47,41 @@ public class UserManagementController {
3947
public Response<PageVo<UserManagementVo>> Userlist(@NotNull Long pageNumber,
4048
@NotNull Long pageSize,
4149
@RequestParam(required = false) String search) {
42-
PageVo<UserManagementVo> userListPage = userManagementService.getUserListPage(pageNumber, pageSize,search);
50+
PageVo<UserManagementVo> userListPage = userManagementService.getUserListPage(pageNumber, pageSize, search);
4351
return Response.success(BusinessStates.SUCCESS, userListPage);
4452
}
4553

54+
@Operation(summary = "添加用户信息")
55+
@PostMapping
56+
public Response<String> addUserInfo(@Validated UserInfoDto userInfo,
57+
MultipartFile avatarFile) {
58+
if (userService.lambdaQuery().eq(UserEntity::getEmail, userInfo.getEmail()).exists()) {
59+
return Response.error(BusinessStates.METHOD_NOT_ALLOWED, "该邮箱已经被使用,请更换邮箱");
60+
}
61+
UserEntity userEntity = new UserEntity();
62+
BeanUtils.copyProperties(userInfo, userEntity);
63+
if (avatarFile != null && !avatarFile.isEmpty()) {
64+
if (avatarFile.getSize() > Constant.FILE_SIZE) {
65+
return Response.error(BusinessStates.VALIDATION_FAILED, "文件大小不可大于2mb");
66+
}
67+
String avatarPath = fileService.uploadImage(avatarFile, Constant.AVATAR_FILE_PATH);
68+
userEntity.setAvatar(avatarPath);
69+
}
70+
userEntity.setPassword(BCryptUtil.encrypt(userEntity.getPassword()));
71+
userEntity.setCreateTime(LocalDateTime.now());
72+
userEntity.setUpdateTime(LocalDateTime.now());
73+
userManagementService.addUserInfo(userEntity);
74+
return Response.success(BusinessStates.SUCCESS);
75+
}
76+
77+
4678
@PutMapping
4779
@Operation(summary = "更新用户信息")
4880
public Response<String> updateUserInfo(@Validated UserInfoDto userInfo,
4981
MultipartFile avatarFile) {
5082
if (avatarFile != null && !avatarFile.isEmpty()) {
5183
if (avatarFile.getSize() > Constant.FILE_SIZE) {
52-
return Response.error(BusinessStates.VALIDATION_FAILED,"文件大小不可大于2mb");
84+
return Response.error(BusinessStates.VALIDATION_FAILED, "文件大小不可大于2mb");
5385
}
5486
String avatarPath = fileService.uploadImage(avatarFile, Constant.AVATAR_FILE_PATH);
5587
userInfo.setAvatar(avatarPath);

web/api-admin/src/main/java/com/ligg/apiadmin/pojo/dto/UserInfoDto.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public class UserInfoDto {
4343
*/
4444
private UserRole role;
4545

46+
private String password;
47+
4648
/**
4749
* 邮箱
4850
*/

web/api-admin/src/main/java/com/ligg/apiadmin/service/UserManagementService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.ligg.apiadmin.pojo.vo.UserManagementVo;
44
import com.ligg.apiadmin.pojo.dto.UserInfoDto;
5+
import com.ligg.common.module.entity.UserEntity;
56
import com.ligg.common.module.vo.PageVo;
67
import jakarta.validation.constraints.NotNull;
78

@@ -20,6 +21,10 @@ public interface UserManagementService {
2021
*/
2122
void updateUserStatus(@NotNull String userId, @NotNull Boolean status);
2223

24+
/**
25+
* 添加用户信息
26+
*/
27+
int addUserInfo(UserEntity userEntity);
2328

2429
/**
2530
* 更新用户信息

web/api-admin/src/main/java/com/ligg/apiadmin/service/impl/UserManagementServiceImpl.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public class UserManagementServiceImpl implements UserManagementService {
3535
@Override
3636
public PageVo<UserManagementVo> getUserListPage(Long pageNumber, Long pageSize, String search) {
3737
IPage<UserManagementVo> page = new Page<>(pageNumber, pageSize);
38-
IPage<UserManagementVo> userInfoVoIPage = userManagementMapper.selectUserList(page,search);
38+
IPage<UserManagementVo> userInfoVoIPage = userManagementMapper.selectUserList(page, search);
3939
PageVo<UserManagementVo> userList = new PageVo<>();
4040
userList.setPages(userInfoVoIPage.getPages());
4141
userList.setTotal(userInfoVoIPage.getTotal());
@@ -65,6 +65,11 @@ public void updateUserStatus(String userId, Boolean isStatus) {
6565
}
6666
}
6767

68+
@Override
69+
public int addUserInfo(UserEntity userEntity) {
70+
return userMapper.insert(userEntity);
71+
}
72+
6873
@Override
6974
public int updateUSerRoleInfo(UserInfoDto userInfo) {
7075
UserEntity userEntity = userMapper.selectById(userInfo.getUserId());
@@ -82,7 +87,7 @@ public int updateUSerRoleInfo(UserInfoDto userInfo) {
8287
}
8388
int updateStatus = userMapper.update(updateWrapper);
8489
if (updateStatus > 0) {
85-
redisUtil.del(String.format("%s:%s",UserConstant.USER_INFO, userInfo.getUserId()));
90+
redisUtil.del(String.format("%s:%s", UserConstant.USER_INFO, userInfo.getUserId()));
8691
}
8792
return updateStatus;
8893
}

0 commit comments

Comments
 (0)