diff --git a/pom.xml b/pom.xml index df911c3..531b24c 100644 --- a/pom.xml +++ b/pom.xml @@ -123,6 +123,10 @@ 4.0.0 test + + org.springframework.boot + spring-boot-starter-validation + diff --git a/src/main/java/top/suyiiyii/sims/common/JwtInterceptor.java b/src/main/java/top/suyiiyii/sims/common/JwtInterceptor.java index 10759c6..9c634f1 100644 --- a/src/main/java/top/suyiiyii/sims/common/JwtInterceptor.java +++ b/src/main/java/top/suyiiyii/sims/common/JwtInterceptor.java @@ -57,4 +57,7 @@ public class JwtInterceptor implements HandlerInterceptor { request.setAttribute("userId", userId); return true; } + public static int getUserIdFromReq(HttpServletRequest request){ + return (int) request.getAttribute("userId"); + } } diff --git a/src/main/java/top/suyiiyii/sims/controller/UserController.java b/src/main/java/top/suyiiyii/sims/controller/UserController.java index 8348da7..d52b86f 100644 --- a/src/main/java/top/suyiiyii/sims/controller/UserController.java +++ b/src/main/java/top/suyiiyii/sims/controller/UserController.java @@ -1,18 +1,25 @@ package top.suyiiyii.sims.controller; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import io.swagger.v3.oas.annotations.Operation; import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpSession; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Email; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.Range; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import top.suyiiyii.sims.common.AuthAccess; +import top.suyiiyii.sims.common.JwtInterceptor; import top.suyiiyii.sims.common.Result; import top.suyiiyii.sims.dto.CommonResponse; import top.suyiiyii.sims.dto.UserDto; +import top.suyiiyii.sims.entity.User; import top.suyiiyii.sims.exception.ServiceException; +import top.suyiiyii.sims.mapper.MpUserMapper; import top.suyiiyii.sims.service.RoleService; import top.suyiiyii.sims.service.UserService; @@ -35,12 +42,14 @@ public class UserController { @Autowired UserService userService; @Autowired + MpUserMapper mpUserMapper; + @Autowired RoleService roleService; @AuthAccess(allowRoles = {"guest"}) @PostMapping("/user/login") - public Result login(@RequestBody LoginRequest request,HttpServletRequest httpServletRequest) { + public Result login(@RequestBody LoginRequest request) { log.info("login request:{}", request); if (StrUtil.isBlank(request.getUsername()) || StrUtil.isBlank(request.getPassword())) { @@ -53,25 +62,28 @@ public class UserController { } LoginResponse response = new LoginResponse(); response.setToken(token); - HttpSession session = httpServletRequest.getSession(); - session.setAttribute("token",token); return Result.success(response); } + @AuthAccess(allowRoles = {"guest"}) @PostMapping("/user/register") - public Result register(@RequestBody RegisterRequest request) { + public Result register(@RequestBody @Valid + RegisterRequest request) { log.info("register request:{}", request); - if (StrUtil.isBlank(request.getUsername()) || StrUtil.isBlank(request.getPassword())) { - - return Result.error("用户名或密码不能为空"); + // 检查 username 是否已存在 + if (mpUserMapper.selectOne(new LambdaQueryWrapper(User.class).eq(User::getUsername, request.getUsername())) != null) { + throw new ServiceException("用户名已存在"); } - if (request.getPassword() == null || request.getPassword().length() < 3) { - throw new ServiceException("密码长度不能小于3位"); + // 检查 studentId 是否已存在 + if (mpUserMapper.selectOne(new LambdaQueryWrapper(User.class).eq(User::getStudentId, request.getStudentId())) != null) { + throw new ServiceException("学号已存在"); + } + // 检查 email 是否已存在 + if (mpUserMapper.selectOne(new LambdaQueryWrapper(User.class).eq(User::getEmail, request.getEmail())) != null) { + throw new ServiceException("邮箱已存在"); } - userService.register(request); - return Result.success(CommonResponse.factory("注册成功")); } @@ -104,19 +116,26 @@ public class UserController { @Operation(description = "获取当前用户信息") @AuthAccess(allowRoles = {"user"}) @GetMapping("/user/me") - public Result getSelf() { - UserDto user = userService.findUser(0); + public Result getSelf(HttpServletRequest request) { + int userId = JwtInterceptor.getUserIdFromReq(request); + UserDto user = userService.findUser(userId); return Result.success(user); } @Data public static class RegisterRequest { + @Length(min = 3, max = 20) private String username; - private Integer studentId; + @Length(min = 6, max = 20) private String password; + @Range(min = 1, max = 1000000000) + private Integer studentId; + @Email private String email; + @Length(min = 1, max = 20) private String grade; + @Length(min = 1, max = 20) private String userGroup; } diff --git a/src/main/java/top/suyiiyii/sims/entity/User.java b/src/main/java/top/suyiiyii/sims/entity/User.java index 3fd02d9..27d2025 100644 --- a/src/main/java/top/suyiiyii/sims/entity/User.java +++ b/src/main/java/top/suyiiyii/sims/entity/User.java @@ -39,10 +39,8 @@ public class User { @UniqueIndex @Column(comment = "邮箱", notNull = true) private String email; - @UniqueIndex @Column(comment = "年级", notNull = true) private String grade; - @UniqueIndex @Column(comment = "用户所属团队", notNull = true) private String userGroup; } diff --git a/src/main/java/top/suyiiyii/sims/service/UserService.java b/src/main/java/top/suyiiyii/sims/service/UserService.java index 5d2aafa..884c6a0 100644 --- a/src/main/java/top/suyiiyii/sims/service/UserService.java +++ b/src/main/java/top/suyiiyii/sims/service/UserService.java @@ -45,6 +45,14 @@ public class UserService { @Autowired private ModelMapper modelMapper; + public void addUser(User user) { + userMapper.addUser(user); + } + + public void updateUser(User user) { + userMapper.updateUser(user); + } + public void deleteUser(int id) { userMapper.deleteUser(id); } @@ -70,33 +78,23 @@ public class UserService { public void register(UserController.RegisterRequest req) { User dbUser = userMapper.selectByUserId(req.getStudentId()); - - if (req.getUsername() == null || req.getUsername().equals("")) { - throw new ServiceException("用户名不能为空"); - } - if (dbUser != null) { throw new ServiceException("账号已经存在"); } - if (req.getStudentId() == null || req.getStudentId().equals("")) { - throw new ServiceException("学号不能为空"); - } - if (req.getPassword() == null || req.getPassword().equals("")) { - - throw new ServiceException("密码不能为空"); - } - if (req.getEmail() == null || req.getEmail().equals("")) { - throw new ServiceException("邮箱不能为空"); - } - if (req.getUserGroup() == null || req.getUserGroup().equals("")) { - throw new ServiceException("组别不能为空"); - } User user = modelMapper.map(req, User.class); + mpUserMapper.insert(user); user = mpUserMapper.selectOne(new LambdaQueryWrapper().eq(User::getUsername, req.getUsername())); rbacService.addRoleWithUserId(user.getId(), "user"); } + public User selectByUsername(String username) { + return userMapper.selectByUserName(username); + } + + public void updatePassword(User user) { + userMapper.updatePassword(user); + } public List findAllUsers() { List users = userMapper.selectAll(); @@ -110,14 +108,6 @@ public class UserService { UserDto.setUserGroup(user.getUserGroup()); UserDto.setRoles(new ArrayList<>()); Integer id = user.getId(); - List roles = roleMapper.selectRolesById(id); - for (Role role : roles) { - Integer roleId = role.getId(); - // 获取一个角色的名称列表 - List roleNameList = roleMapper.selectRoleNamesByRoleId(roleId); - // 累加角色名称到用户的角色列表中 - UserDto.getRoles().addAll(roleNameList); - } UserDtos.add(UserDto); } return UserDtos; @@ -127,31 +117,23 @@ public class UserService { UserDto UserDto = new UserDto(); User user = userMapper.selectById(id); + if (user == null) { + throw new ServiceException("用户不存在"); + } UserDto.setUserId(user.getId()); UserDto.setUsername(user.getUsername()); UserDto.setGrade(user.getGrade()); UserDto.setUserGroup(user.getUserGroup()); UserDto.setRoles(new ArrayList<>()); - List roles = roleMapper.selectRolesById(id); - for (Role role : roles) { - Integer roleId = role.getId(); - // 获取一个角色的名称列表 - List roleNameList = roleMapper.selectRoleNamesByRoleId(roleId); - // 累加角色名称到用户的角色列表中 - UserDto.getRoles().addAll(roleNameList); - } - - + //TODO: 获取用户角色 return UserDto; } -/* + public User selectByUserId(Integer studentId) { + return userMapper.selectByUserId(studentId); + } + public List selectRolesById(Integer studentId) { return roleMapper.selectRolesById(studentId); } -*/ - - public Integer getStudentIdByUserId(Integer userId) { - return userMapper.getStudentIdByUserId(userId); - } }