refactor(auth):重构认证模块并增强验证机制
- 重命名并调整 DTO 类结构,将 LoginRequest 和 RegisterRequest 迁移至 request 包- 引入 AuthLoginRequest 和 AuthRegisterRequest 并添加字段验证注解 - 更新 AuthController 使用新的 DTO 并增加 @Valid 参数校验 - 修改 AuthService 接口及实现类,接收 User 实体而非 RegisterRequest - 添加全局异常处理器 GlobalExceptionHandler 处理参数校验和业务异常 - 新增 ErrorCode 枚举统一管理错误码和消息 - 引入 UserConverter 组件用于 DTO 到实体的转换 - 增强用户注册与登录逻辑,完善异常处理和错误提示 - 移除旧的 BadCredentialsException 捕获逻辑 - 调整 pom.xml 添加 spring-boot-starter-validation 和相关依赖 - 更新 User 实体类,添加完整字段映射和角色关联配置 - 新增 UserInfoService 及其实现,提供用户管理和密码设置功能 -优化 UserMapper 查询方法,支持联表查询用户及其角色信息 - 删除无用的 HLSController 控制器 - 完善 ImageController 文件上传逻辑并更新响应结构 - 添加用户名和密码格式验证工具类 PasswordValidate 和 UsernameValidate
This commit is contained in:
@@ -29,5 +29,21 @@
|
||||
<groupId>com.alibaba.fastjson2</groupId>
|
||||
<artifactId>fastjson2</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.nopj</groupId>
|
||||
<artifactId>chaos_api_domain</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-validation</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
@@ -0,0 +1,54 @@
|
||||
package cn.nopj.chaos_api.common.constants;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 全局错误码枚举(HTTP状态码 + 业务错误码)
|
||||
* 规范:
|
||||
* - 4xx: 客户端错误
|
||||
* - 5xx: 服务端错误
|
||||
* - 业务码分段:
|
||||
* 100-199: 用户相关
|
||||
* 200-299: 帖子/评论相关
|
||||
* 300-399: 系统/第三方服务
|
||||
*/
|
||||
@Getter
|
||||
public enum ErrorCode {
|
||||
// ================== 用户相关 (100-199) ==================
|
||||
USERNAME_EXISTS(409, "USER-101", "用户名已存在"),
|
||||
USERNAME_FORMAT_ERROR(400, "USER-102", "用户名需5-20位字母数字组合"),
|
||||
USERNAME_PATTERN_INVALID( 400, "USER-103" , "用户名格式无效,必须由字母、数字、下划线" ),
|
||||
PASSWORD_FORMAT_ERROR(400, "USER-104", "密码需6-20位字符组合"),
|
||||
USER_NOT_EXISTS(404, "USER-104", "用户不存在"),
|
||||
USER_ID_INVALID(400, "USER-105", "用户ID无效"),
|
||||
USER_NOT_LOGIN(401, "USER-105", "请先登录"),
|
||||
USER_BANNED(403, "USER-106", "账号已被封禁"),
|
||||
EMAIL_EXISTS(409, "USER-107", "邮箱已注册"),
|
||||
EMAIL_FORMAT_ERROR(400, "USER-108", "邮箱格式无效"),
|
||||
PHONE_EXISTS(409, "USER-109", "手机号已注册"),
|
||||
PHONE_FORMAT_ERROR(400, "USER-110", "手机号格式无效"),
|
||||
|
||||
// ================== 论坛内容相关 (200-299) ==================
|
||||
POST_NOT_FOUND(404, "POST-201", "帖子不存在"),
|
||||
POST_DELETED(410, "POST-202", "帖子已被删除"),
|
||||
POST_TITLE_EMPTY(400, "POST-203", "标题不能为空"),
|
||||
POST_CONTENT_EMPTY(400, "POST-204", "内容不能为空"),
|
||||
COMMENT_NOT_FOUND(404, "POST-205", "评论不存在"),
|
||||
COMMENT_TOO_LONG(400, "POST-206", "评论超过500字限制"),
|
||||
|
||||
// ================== 系统/第三方 (300-399) ==================
|
||||
CAPTCHA_ERROR(400, "SYS-301", "验证码错误"),
|
||||
SMS_SEND_FAILED(500, "SYS-302", "短信发送失败"),
|
||||
FILE_UPLOAD_FAILED(500, "SYS-303", "文件上传失败"),
|
||||
RATE_LIMIT_EXCEEDED(429, "SYS-304", "操作过于频繁"), ;
|
||||
|
||||
private final int httpStatus;
|
||||
private final String code; // 业务错误码(领域-编号)
|
||||
private final String message;
|
||||
|
||||
ErrorCode(int httpStatus, String code, String message) {
|
||||
this.httpStatus = httpStatus;
|
||||
this.code = code;
|
||||
this.message = message;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package cn.nopj.chaos_api.common.exceotion;
|
||||
|
||||
import cn.nopj.chaos_api.common.constants.ErrorCode;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public class BizException extends RuntimeException{
|
||||
public final ErrorCode errorCode;
|
||||
|
||||
public BizException(ErrorCode errorCode) {
|
||||
super(errorCode.getMessage());
|
||||
this.errorCode = errorCode;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package cn.nopj.chaos_api.converter;
|
||||
|
||||
|
||||
import cn.nopj.chaos_api.domain.entity.User;
|
||||
import cn.nopj.chaos_api.dto.request.AuthRegisterRequest;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class UserConverter {
|
||||
public User convert(AuthRegisterRequest request){
|
||||
User user = new User();
|
||||
user.setUsername(request.getUsername());
|
||||
user.setPassword(request.getPassword());
|
||||
user.setEnabled(true);
|
||||
user.setAccountNonExpired(true);
|
||||
user.setCredentialsNonExpired(true);
|
||||
user.setAccountNonLocked(true);
|
||||
user.setCreateTime(java.time.LocalDateTime.now());
|
||||
user.setUpdateTime(java.time.LocalDateTime.now());
|
||||
return user;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user