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:
Chaos
2025-11-18 16:44:43 +08:00
parent a22a369afa
commit 8fc7f6554d
33 changed files with 568 additions and 95 deletions

View File

@@ -20,6 +20,10 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
@@ -29,5 +33,11 @@
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>3.0.2</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View File

@@ -1,21 +1,57 @@
package cn.nopj.chaos_api.domain.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
@Data
@TableName("t_user")
public class User implements Serializable {
/**
* 用户id
*/
@TableId
private Long id;
/**
* 用户名称
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 账号是否启用
*/
private Boolean enabled;
/**
* 账号是否未过期
*/
private Boolean accountNonExpired;
/**
* 密码是否未过期
*/
private Boolean credentialsNonExpired;
/**
* 账号是否未锁定
*/
private Boolean accountNonLocked;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
@TableField(exist = false)
private List<Role> roles;
}

View File

@@ -1,12 +0,0 @@
package cn.nopj.chaos_api.dto;
import lombok.Data;
/**
* 登录请求参数
*/
@Data
public class LoginRequest {
private String username;
private String password;
}

View File

@@ -1,12 +0,0 @@
package cn.nopj.chaos_api.dto;
import lombok.Data;
/**
* 注册请求参数
*/
@Data
public class RegisterRequest {
private String username;
private String password;
}

View File

@@ -0,0 +1,15 @@
package cn.nopj.chaos_api.dto.request;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
/**
* 登录请求参数
*/
@Data
public class AuthLoginRequest {
@Pattern(regexp = "^[a-zA-Z0-9_-]{5,16}$", message = "用户名需为5-16位字母、数字、_或-")
private String username;
@Pattern(regexp = "^.{8,16}$", message = "密码长度需为8-16位")
private String password;
}

View File

@@ -0,0 +1,17 @@
package cn.nopj.chaos_api.dto.request;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
/**
* 注册请求参数
*/
@Data
public class AuthRegisterRequest {
@Pattern(regexp = "^[a-zA-Z0-9_-]{5,16}$", message = "用户名需为5-16位字母、数字、_或-")
private String username;
//密码不低于8位 不高于16位不限制字符
@Pattern(regexp = "^.{8,16}$", message = "密码长度需为8-16位")
private String password;
}

View File

@@ -0,0 +1,13 @@
package cn.nopj.chaos_api.dto.request;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
@Data
public class SetUserPasswordRequest {
//用户id为数字Long类型
@Pattern(regexp = "^[0-9]+$", message = "用户id格式错误")
private String userId;
@Pattern(regexp = "^.{8,16}$", message = "密码长度需为8-16位")
private String password;
}

View File

@@ -1,4 +1,4 @@
package cn.nopj.chaos_api.dto;
package cn.nopj.chaos_api.dto.response;
import lombok.Data;

View File

@@ -0,0 +1,8 @@
package cn.nopj.chaos_api.dto.response;
import lombok.Data;
@Data
public class RoleResponse {
private Long id;
private String name;
}

View File

@@ -0,0 +1,12 @@
package cn.nopj.chaos_api.dto.response;
import lombok.Data;
import java.util.List;
@Data
public class UserinfoResponse {
private Long id;
private String username;
private List<RoleResponse> roles;
}