|
|
|
|
# 认证API接口
|
|
|
|
|
|
|
|
|
|
<cite>
|
|
|
|
|
**本文档引用的文件**
|
|
|
|
|
- [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java)
|
|
|
|
|
- [SystemController.java](file://crm-auth/src/main/java/com/crm/auth/controller/SystemController.java)
|
|
|
|
|
- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java)
|
|
|
|
|
- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java)
|
|
|
|
|
- [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java)
|
|
|
|
|
- [LoginParam.java](file://crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java)
|
|
|
|
|
- [UserPageParam.java](file://crm-auth/src/main/java/com/crm/auth/domain/param/UserPageParam.java)
|
|
|
|
|
- [LoginResultDTO.java](file://crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java)
|
|
|
|
|
- [UserInfoDTO.java](file://crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java)
|
|
|
|
|
- [UserListDTO.java](file://crm-auth/src/main/java/com/crm/auth/domain/dto/UserListDTO.java)
|
|
|
|
|
- [UserStatsVO.java](file://crm-auth/src/main/java/com/crm/auth/domain/dto/UserStatsVO.java)
|
|
|
|
|
- [AuthUserMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java)
|
|
|
|
|
- [AuthIdentityMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthIdentityMapper.java)
|
|
|
|
|
- [AuthUserServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java)
|
|
|
|
|
- [AuthIdentityServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java)
|
|
|
|
|
- [AuthService.java](file://crm-auth/src/main/java/com/crm/auth/service/IAuthService.java)
|
|
|
|
|
- [IAuthUserService.java](file://crm-auth/src/main/java/com/crm/auth/service/IAuthUserService.java)
|
|
|
|
|
- [IAuthIdentityService.java](file://crm-auth/src/main/java/com/crm/auth/service/IAuthIdentityService.java)
|
|
|
|
|
- [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java)
|
|
|
|
|
- [Result.java](file://crm-base/src/main/java/com/crm/base/domain/result/Result.java)
|
|
|
|
|
- [ResultCodeEnum.java](file://crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java)
|
|
|
|
|
- [BusinessErrorException.java](file://crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java)
|
|
|
|
|
- [PermissionErrorException.java](file://crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java)
|
|
|
|
|
- [ResourceNotExistException.java](file://crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java)
|
|
|
|
|
- [MissingParameterException.java](file://crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java)
|
|
|
|
|
- [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java)
|
|
|
|
|
- [DataScopeTables.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java)
|
|
|
|
|
</cite>
|
|
|
|
|
|
|
|
|
|
## 更新摘要
|
|
|
|
|
**所做更改**
|
|
|
|
|
- 新增用户列表查询相关接口文档
|
|
|
|
|
- 添加用户统计功能说明
|
|
|
|
|
- 更新系统控制器接口定义
|
|
|
|
|
- 补充分页查询和统计接口的详细参数说明
|
|
|
|
|
|
|
|
|
|
## 目录
|
|
|
|
|
1. [简介](#简介)
|
|
|
|
|
2. [项目结构](#项目结构)
|
|
|
|
|
3. [核心组件](#核心组件)
|
|
|
|
|
4. [架构总览](#架构总览)
|
|
|
|
|
5. [详细组件分析](#详细组件分析)
|
|
|
|
|
6. [依赖关系分析](#依赖关系分析)
|
|
|
|
|
7. [性能考虑](#性能考虑)
|
|
|
|
|
8. [故障排查指南](#故障排查指南)
|
|
|
|
|
9. [结论](#结论)
|
|
|
|
|
10. [附录](#附录)
|
|
|
|
|
|
|
|
|
|
## 简介
|
|
|
|
|
本文件为认证模块的RESTful API文档,覆盖用户登录、登出、令牌刷新、用户信息查询以及用户列表管理等功能。文档包含每个接口的HTTP方法、URL路径、请求参数、响应格式、错误码、鉴权方式与调用频率限制说明,并提供最佳实践与常见问题解决方案。
|
|
|
|
|
|
|
|
|
|
## 项目结构
|
|
|
|
|
认证功能集中在 crm-auth 模块中,采用分层架构:
|
|
|
|
|
- 控制器层:对外暴露REST接口(包括认证和用户管理)
|
|
|
|
|
- 安全层:JWT过滤器、令牌服务、数据权限拦截器
|
|
|
|
|
- 服务层:业务逻辑(用户、身份、权限、用户列表管理)
|
|
|
|
|
- 持久层:MyBatis Mapper映射
|
|
|
|
|
- 基础库:统一结果封装、异常处理、通用配置
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
graph TB
|
|
|
|
|
Client["客户端"] --> AC["AuthController<br/>认证控制器"]
|
|
|
|
|
Client --> SC["SystemController<br/>系统控制器"]
|
|
|
|
|
AC --> TS["TokenService<br/>令牌服务"]
|
|
|
|
|
AC --> AUIS["AuthUserServiceImpl<br/>用户服务实现"]
|
|
|
|
|
AC --> AIS["AuthIdentityServiceImpl<br/>身份服务实现"]
|
|
|
|
|
SC --> AUIS
|
|
|
|
|
SC --> AIS
|
|
|
|
|
AUIS --> AUM["AuthUserMapper<br/>用户映射"]
|
|
|
|
|
AIS --> AIM["AuthIdentityMapper<br/>身份映射"]
|
|
|
|
|
AC --> JAF["JwtAuthenticationFilter<br/>JWT过滤器"]
|
|
|
|
|
AC --> DSI["DataScopeInterceptor<br/>数据范围拦截器"]
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
图表来源
|
|
|
|
|
- [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java)
|
|
|
|
|
- [SystemController.java](file://crm-auth/src/main/java/com/crm/auth/controller/SystemController.java)
|
|
|
|
|
- [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java)
|
|
|
|
|
- [AuthUserServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java)
|
|
|
|
|
- [AuthIdentityServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java)
|
|
|
|
|
- [AuthUserMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java)
|
|
|
|
|
- [AuthIdentityMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthIdentityMapper.java)
|
|
|
|
|
- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java)
|
|
|
|
|
- [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java)
|
|
|
|
|
|
|
|
|
|
章节来源
|
|
|
|
|
- [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java)
|
|
|
|
|
- [SystemController.java](file://crm-auth/src/main/java/com/crm/auth/controller/SystemController.java)
|
|
|
|
|
- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java)
|
|
|
|
|
|
|
|
|
|
## 核心组件
|
|
|
|
|
- 认证控制器:提供登录、登出、刷新令牌、获取当前用户信息等接口
|
|
|
|
|
- 系统控制器:提供用户列表查询、用户统计等管理功能
|
|
|
|
|
- 令牌服务:生成、校验、刷新JWT令牌,管理令牌生命周期
|
|
|
|
|
- JWT过滤器:从请求头解析并验证JWT,建立安全上下文
|
|
|
|
|
- 用户/身份服务:查询用户与身份信息,支撑登录与用户信息接口
|
|
|
|
|
- 统一结果与异常:标准化响应结构与全局异常处理
|
|
|
|
|
|
|
|
|
|
章节来源
|
|
|
|
|
- [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java)
|
|
|
|
|
- [SystemController.java](file://crm-auth/src/main/java/com/crm/auth/controller/SystemController.java)
|
|
|
|
|
- [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java)
|
|
|
|
|
- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java)
|
|
|
|
|
- [AuthUserServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java)
|
|
|
|
|
- [AuthIdentityServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java)
|
|
|
|
|
- [Result.java](file://crm-base/src/main/java/com/crm/base/domain/result/Result.java)
|
|
|
|
|
- [ResultCodeEnum.java](file://crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java)
|
|
|
|
|
|
|
|
|
|
## 架构总览
|
|
|
|
|
认证流程的关键交互如下:
|
|
|
|
|
- 登录:客户端提交用户名/密码,服务端校验后签发JWT
|
|
|
|
|
- 受保护接口:客户端携带JWT,过滤器校验后放行
|
|
|
|
|
- 刷新令牌:使用刷新令牌换取新访问令牌
|
|
|
|
|
- 用户信息:基于已认证的上下文返回用户详情
|
|
|
|
|
- 用户管理:管理员通过系统控制器进行用户列表查询和统计
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
sequenceDiagram
|
|
|
|
|
participant C as "客户端"
|
|
|
|
|
participant F as "JwtAuthenticationFilter"
|
|
|
|
|
participant A as "AuthController"
|
|
|
|
|
participant S as "SystemController"
|
|
|
|
|
participant T as "TokenService"
|
|
|
|
|
participant U as "AuthUserServiceImpl"
|
|
|
|
|
participant I as "AuthIdentityServiceImpl"
|
|
|
|
|
Note over C,A : 登录流程
|
|
|
|
|
C->>A : POST /auth/login
|
|
|
|
|
A->>U : 校验用户凭据
|
|
|
|
|
U-->>A : 用户信息
|
|
|
|
|
A->>T : 生成访问令牌与刷新令牌
|
|
|
|
|
T-->>A : 令牌对象
|
|
|
|
|
A-->>C : 登录成功响应
|
|
|
|
|
Note over C,F : 受保护接口访问
|
|
|
|
|
C->>F : 携带Authorization : Bearer <token>
|
|
|
|
|
F->>F : 解析并校验JWT
|
|
|
|
|
F-->>S : 建立安全上下文
|
|
|
|
|
S-->>C : 用户列表或统计信息
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
图表来源
|
|
|
|
|
- [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java)
|
|
|
|
|
- [SystemController.java](file://crm-auth/src/main/java/com/crm/auth/controller/SystemController.java)
|
|
|
|
|
- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java)
|
|
|
|
|
- [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java)
|
|
|
|
|
- [AuthUserServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java)
|
|
|
|
|
- [AuthIdentityServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java)
|
|
|
|
|
|
|
|
|
|
## 详细组件分析
|
|
|
|
|
|
|
|
|
|
### 认证控制器接口定义
|
|
|
|
|
- 登录
|
|
|
|
|
- HTTP方法:POST
|
|
|
|
|
- URL路径:/auth/login
|
|
|
|
|
- 请求体:用户名、密码(具体字段以LoginParam为准)
|
|
|
|
|
- 响应体:登录结果(包含访问令牌、刷新令牌、过期时间等,参考LoginResultDTO)
|
|
|
|
|
- 鉴权:无需鉴权
|
|
|
|
|
- 错误码:未找到用户、密码错误、参数缺失等(由全局异常处理器统一返回)
|
|
|
|
|
- 登出
|
|
|
|
|
- HTTP方法:POST
|
|
|
|
|
- URL路径:/auth/logout
|
|
|
|
|
- 请求体:无或可选令牌失效标识
|
|
|
|
|
- 响应体:标准成功响应
|
|
|
|
|
- 鉴权:需要有效访问令牌
|
|
|
|
|
- 错误码:令牌无效、会话不存在等
|
|
|
|
|
- 刷新令牌
|
|
|
|
|
- HTTP方法:POST
|
|
|
|
|
- URL路径:/auth/refresh
|
|
|
|
|
- 请求体:刷新令牌
|
|
|
|
|
- 响应体:新的访问令牌及过期时间
|
|
|
|
|
- 鉴权:无需鉴权(仅校验刷新令牌有效性)
|
|
|
|
|
- 错误码:刷新令牌无效、已过期等
|
|
|
|
|
- 获取当前用户信息
|
|
|
|
|
- HTTP方法:GET
|
|
|
|
|
- URL路径:/auth/user/info
|
|
|
|
|
- 请求体:无
|
|
|
|
|
- 响应体:用户基本信息(参考UserInfoDTO)
|
|
|
|
|
- 鉴权:需要有效访问令牌
|
|
|
|
|
- 错误码:未登录、用户不存在等
|
|
|
|
|
|
|
|
|
|
章节来源
|
|
|
|
|
- [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java)
|
|
|
|
|
- [LoginParam.java](file://crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java)
|
|
|
|
|
- [LoginResultDTO.java](file://crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java)
|
|
|
|
|
- [UserInfoDTO.java](file://crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java)
|
|
|
|
|
|
|
|
|
|
### 系统控制器接口定义(新增)
|
|
|
|
|
- 用户列表查询
|
|
|
|
|
- HTTP方法:GET
|
|
|
|
|
- URL路径:/system/users
|
|
|
|
|
- 请求参数:分页参数、搜索条件(用户名、状态等)
|
|
|
|
|
- 响应体:用户列表分页结果(参考UserListDTO)
|
|
|
|
|
- 鉴权:需要管理员权限
|
|
|
|
|
- 错误码:权限不足、参数错误等
|
|
|
|
|
- 用户统计信息
|
|
|
|
|
- HTTP方法:GET
|
|
|
|
|
- URL路径:/system/users/stats
|
|
|
|
|
- 请求参数:统计维度(按部门、角色、状态等)
|
|
|
|
|
- 响应体:用户统计数据(参考UserStatsVO)
|
|
|
|
|
- 鉴权:需要管理员权限
|
|
|
|
|
- 错误码:权限不足、统计维度无效等
|
|
|
|
|
|
|
|
|
|
**新增** 系统控制器提供了完整的用户管理能力,支持分页查询、条件筛选和统计分析功能。
|
|
|
|
|
|
|
|
|
|
章节来源
|
|
|
|
|
- [SystemController.java](file://crm-auth/src/main/java/com/crm/auth/controller/SystemController.java)
|
|
|
|
|
- [UserPageParam.java](file://crm-auth/src/main/java/com/crm/auth/domain/param/UserPageParam.java)
|
|
|
|
|
- [UserListDTO.java](file://crm-auth/src/main/java/com/crm/auth/domain/dto/UserListDTO.java)
|
|
|
|
|
- [UserStatsVO.java](file://crm-auth/src/main/java/com/crm/auth/domain/dto/UserStatsVO.java)
|
|
|
|
|
|
|
|
|
|
### 令牌服务与JWT过滤器
|
|
|
|
|
- 令牌服务职责
|
|
|
|
|
- 生成访问令牌与刷新令牌
|
|
|
|
|
- 校验令牌签名与有效期
|
|
|
|
|
- 刷新令牌换取新访问令牌
|
|
|
|
|
- JWT过滤器职责
|
|
|
|
|
- 从请求头提取Authorization
|
|
|
|
|
- 解析并校验JWT
|
|
|
|
|
- 将用户信息注入安全上下文供后续接口使用
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
classDiagram
|
|
|
|
|
class TokenService {
|
|
|
|
|
+generateAccessToken(user) string
|
|
|
|
|
+generateRefreshToken(user) string
|
|
|
|
|
+validateToken(token) bool
|
|
|
|
|
+refreshAccessToken(refreshToken) string
|
|
|
|
|
}
|
|
|
|
|
class JwtAuthenticationFilter {
|
|
|
|
|
+doFilter(request, response, chain) void
|
|
|
|
|
-parseToken(request) string
|
|
|
|
|
-validateAndSetContext(token) void
|
|
|
|
|
}
|
|
|
|
|
TokenService <.. JwtAuthenticationFilter : "校验与刷新"
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
图表来源
|
|
|
|
|
- [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java)
|
|
|
|
|
- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java)
|
|
|
|
|
|
|
|
|
|
章节来源
|
|
|
|
|
- [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java)
|
|
|
|
|
- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java)
|
|
|
|
|
|
|
|
|
|
### 用户与身份服务
|
|
|
|
|
- 用户服务
|
|
|
|
|
- 根据用户名查询用户
|
|
|
|
|
- 校验密码
|
|
|
|
|
- 组装用户上下文
|
|
|
|
|
- 支持用户列表分页查询
|
|
|
|
|
- 提供用户统计分析功能
|
|
|
|
|
- 身份服务
|
|
|
|
|
- 查询用户身份关联信息
|
|
|
|
|
- 支持第三方身份集成(如钉钉等)
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
flowchart TD
|
|
|
|
|
Start(["登录入口"]) --> CheckParams["校验请求参数"]
|
|
|
|
|
CheckParams --> QueryUser["查询用户信息"]
|
|
|
|
|
QueryUser --> UserFound{"用户存在?"}
|
|
|
|
|
UserFound --> |否| ReturnError["返回用户不存在"]
|
|
|
|
|
UserFound --> |是| VerifyPwd["校验密码"]
|
|
|
|
|
VerifyPwd --> PwdOk{"密码正确?"}
|
|
|
|
|
PwdOk --> |否| ReturnPwdErr["返回密码错误"]
|
|
|
|
|
PwdOk --> |是| GenTokens["生成访问与刷新令牌"]
|
|
|
|
|
GenTokens --> ReturnSuccess["返回登录成功响应"]
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
图表来源
|
|
|
|
|
- [AuthUserServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java)
|
|
|
|
|
- [AuthIdentityServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java)
|
|
|
|
|
- [AuthUserMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java)
|
|
|
|
|
- [AuthIdentityMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthIdentityMapper.java)
|
|
|
|
|
|
|
|
|
|
章节来源
|
|
|
|
|
- [AuthUserServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java)
|
|
|
|
|
- [AuthIdentityServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java)
|
|
|
|
|
- [IAuthUserService.java](file://crm-auth/src/main/java/com/crm/auth/service/IAuthUserService.java)
|
|
|
|
|
- [IAuthIdentityService.java](file://crm-auth/src/main/java/com/crm/auth/service/IAuthIdentityService.java)
|
|
|
|
|
|
|
|
|
|
### 数据权限与安全配置
|
|
|
|
|
- 数据范围拦截器:在查询时自动附加数据范围条件
|
|
|
|
|
- 安全配置:注册过滤器、白名单路径、跨域策略等
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
graph LR
|
|
|
|
|
SC["SecurityConfig"] --> JAF["JwtAuthenticationFilter"]
|
|
|
|
|
SC --> DSI["DataScopeInterceptor"]
|
|
|
|
|
DSI --> DST["DataScopeTables"]
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
图表来源
|
|
|
|
|
- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java)
|
|
|
|
|
- [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java)
|
|
|
|
|
- [DataScopeTables.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java)
|
|
|
|
|
|
|
|
|
|
章节来源
|
|
|
|
|
- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java)
|
|
|
|
|
- [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java)
|
|
|
|
|
- [DataScopeTables.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java)
|
|
|
|
|
|
|
|
|
|
## 依赖关系分析
|
|
|
|
|
- 控制器依赖服务层进行业务处理
|
|
|
|
|
- 服务层依赖Mapper进行数据访问
|
|
|
|
|
- 安全过滤器与令牌服务贯穿所有受保护接口
|
|
|
|
|
- 统一异常与结果封装确保一致的响应格式
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
graph TB
|
|
|
|
|
AC["AuthController"] --> AUIS["AuthUserServiceImpl"]
|
|
|
|
|
AC --> AIS["AuthIdentityServiceImpl"]
|
|
|
|
|
SC["SystemController"] --> AUIS
|
|
|
|
|
SC --> AIS
|
|
|
|
|
AUIS --> AUM["AuthUserMapper"]
|
|
|
|
|
AIS --> AIM["AuthIdentityMapper"]
|
|
|
|
|
AC --> TS["TokenService"]
|
|
|
|
|
AC --> JAF["JwtAuthenticationFilter"]
|
|
|
|
|
AC --> DSI["DataScopeInterceptor"]
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
图表来源
|
|
|
|
|
- [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java)
|
|
|
|
|
- [SystemController.java](file://crm-auth/src/main/java/com/crm/auth/controller/SystemController.java)
|
|
|
|
|
- [AuthUserServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java)
|
|
|
|
|
- [AuthIdentityServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java)
|
|
|
|
|
- [AuthUserMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java)
|
|
|
|
|
- [AuthIdentityMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthIdentityMapper.java)
|
|
|
|
|
- [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java)
|
|
|
|
|
- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java)
|
|
|
|
|
- [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java)
|
|
|
|
|
|
|
|
|
|
章节来源
|
|
|
|
|
- [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java)
|
|
|
|
|
- [SystemController.java](file://crm-auth/src/main/java/com/crm/auth/controller/SystemController.java)
|
|
|
|
|
- [AuthService.java](file://crm-auth/src/main/java/com/crm/auth/service/IAuthService.java)
|
|
|
|
|
|
|
|
|
|
## 性能考虑
|
|
|
|
|
- 令牌缓存:对频繁的用户信息查询可引入本地或分布式缓存以减少数据库压力
|
|
|
|
|
- 连接池:合理配置数据库连接池大小,避免连接耗尽
|
|
|
|
|
- 令牌长度:控制JWT负载大小,避免过大影响网络传输
|
|
|
|
|
- 限流策略:对登录与刷新接口实施速率限制,防止暴力破解与滥用
|
|
|
|
|
- 异步处理:耗时操作(如第三方身份校验)建议异步化
|
|
|
|
|
- 分页查询:用户列表查询必须使用分页,避免一次性加载大量数据
|
|
|
|
|
- 索引优化:为用户查询常用字段建立合适的数据库索引
|
|
|
|
|
|
|
|
|
|
[本节为通用指导,不直接分析具体文件]
|
|
|
|
|
|
|
|
|
|
## 故障排查指南
|
|
|
|
|
- 常见错误类型
|
|
|
|
|
- 参数缺失:检查请求体字段是否完整
|
|
|
|
|
- 用户不存在:确认用户名是否正确且已激活
|
|
|
|
|
- 密码错误:提示用户重试或重置密码
|
|
|
|
|
- 令牌无效:检查Authorization头格式与令牌是否过期
|
|
|
|
|
- 权限不足:检查用户角色与资源权限配置
|
|
|
|
|
- 分页参数错误:检查页码和每页数量是否在合理范围内
|
|
|
|
|
- 全局异常处理
|
|
|
|
|
- 统一异常处理器捕获业务异常并返回标准错误响应
|
|
|
|
|
- 日志与追踪
|
|
|
|
|
- 启用请求链路追踪以便定位问题
|
|
|
|
|
- 用户列表查询问题
|
|
|
|
|
- 检查分页参数是否有效
|
|
|
|
|
- 验证搜索条件是否符合预期
|
|
|
|
|
- 确认用户权限是否足够访问目标数据
|
|
|
|
|
|
|
|
|
|
章节来源
|
|
|
|
|
- [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java)
|
|
|
|
|
- [BusinessErrorException.java](file://crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java)
|
|
|
|
|
- [PermissionErrorException.java](file://crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java)
|
|
|
|
|
- [ResourceNotExistException.java](file://crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java)
|
|
|
|
|
- [MissingParameterException.java](file://crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java)
|
|
|
|
|
- [Result.java](file://crm-base/src/main/java/com/crm/base/domain/result/Result.java)
|
|
|
|
|
- [ResultCodeEnum.java](file://crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java)
|
|
|
|
|
|
|
|
|
|
## 结论
|
|
|
|
|
本认证模块通过清晰的层次划分与统一的异常处理机制,提供了稳定可靠的登录、登出、令牌刷新、用户信息查询以及用户列表管理功能。新增的系统控制器接口增强了用户管理能力,支持分页查询和统计分析。建议在接入时遵循最佳实践,结合限流与缓存优化性能,并通过完善的日志与监控保障系统稳定性。
|
|
|
|
|
|
|
|
|
|
[本节为总结性内容,不直接分析具体文件]
|
|
|
|
|
|
|
|
|
|
## 附录
|
|
|
|
|
|
|
|
|
|
### 接口清单与示例
|
|
|
|
|
- 登录
|
|
|
|
|
- 方法:POST
|
|
|
|
|
- 路径:/auth/login
|
|
|
|
|
- 请求体:{ "username": "string", "password": "string" }
|
|
|
|
|
- 响应体:{ "code": "number", "message": "string", "data": { "accessToken": "string", "refreshToken": "string", "expiresIn": "number" } }
|
|
|
|
|
- 鉴权:无
|
|
|
|
|
- 错误码:400参数缺失、401凭证错误、404用户不存在
|
|
|
|
|
- 登出
|
|
|
|
|
- 方法:POST
|
|
|
|
|
- 路径:/auth/logout
|
|
|
|
|
- 请求体:无
|
|
|
|
|
- 响应体:{ "code": "number", "message": "string", "data": null }
|
|
|
|
|
- 鉴权:需要有效访问令牌
|
|
|
|
|
- 错误码:401令牌无效、403权限不足
|
|
|
|
|
- 刷新令牌
|
|
|
|
|
- 方法:POST
|
|
|
|
|
- 路径:/auth/refresh
|
|
|
|
|
- 请求体:{ "refreshToken": "string" }
|
|
|
|
|
- 响应体:{ "code": "number", "message": "string", "data": { "accessToken": "string", "expiresIn": "number" } }
|
|
|
|
|
- 鉴权:无
|
|
|
|
|
- 错误码:400参数缺失、401刷新令牌无效
|
|
|
|
|
- 获取当前用户信息
|
|
|
|
|
- 方法:GET
|
|
|
|
|
- 路径:/auth/user/info
|
|
|
|
|
- 请求体:无
|
|
|
|
|
- 响应体:{ "code": "number", "message": "string", "data": { "userId": "string", "username": "string", "roles": ["string"], "permissions": ["string"] } }
|
|
|
|
|
- 鉴权:需要有效访问令牌
|
|
|
|
|
- 错误码:401未登录、404用户不存在
|
|
|
|
|
- 用户列表查询(新增)
|
|
|
|
|
- 方法:GET
|
|
|
|
|
- 路径:/system/users
|
|
|
|
|
- 请求参数:page=1&size=10&username=&status=
|
|
|
|
|
- 响应体:{ "code": "number", "message": "string", "data": { "records": [...], "total": "number", "current": "number", "size": "number" } }
|
|
|
|
|
- 鉴权:需要管理员权限
|
|
|
|
|
- 错误码:401未授权、403权限不足、400参数错误
|
|
|
|
|
- 用户统计信息(新增)
|
|
|
|
|
- 方法:GET
|
|
|
|
|
- 路径:/system/users/stats
|
|
|
|
|
- 请求参数:dimension=department|role|status
|
|
|
|
|
- 响应体:{ "code": "number", "message": "string", "data": { "totalUsers": "number", "byDepartment": {...}, "byRole": {...}, "byStatus": {...} } }
|
|
|
|
|
- 鉴权:需要管理员权限
|
|
|
|
|
- 错误码:401未授权、403权限不足、400统计维度无效
|
|
|
|
|
|
|
|
|
|
### 鉴权方式
|
|
|
|
|
- 访问令牌:Bearer Token,置于请求头 Authorization: Bearer <token>
|
|
|
|
|
- 刷新令牌:用于换取新的访问令牌,需妥善保管
|
|
|
|
|
- 白名单接口:登录、刷新等接口无需鉴权
|
|
|
|
|
- 管理员权限:用户管理接口需要特定的管理员角色权限
|
|
|
|
|
|
|
|
|
|
### 调用频率限制
|
|
|
|
|
- 登录接口:建议限制同一IP每分钟不超过10次
|
|
|
|
|
- 刷新接口:建议限制同一用户每小时不超过50次
|
|
|
|
|
- 用户列表查询:建议限制同一用户每分钟不超过30次
|
|
|
|
|
- 统计接口:建议限制同一用户每分钟不超过10次
|
|
|
|
|
- 其他接口:按业务需求配置限流策略
|
|
|
|
|
|
|
|
|
|
### 最佳实践
|
|
|
|
|
- 前端存储:使用安全的存储方式保存令牌,避免XSS攻击
|
|
|
|
|
- 令牌轮换:定期刷新访问令牌,缩短有效期
|
|
|
|
|
- 错误处理:统一处理异常并给出友好提示
|
|
|
|
|
- 监控告警:对失败率与延迟进行监控与告警
|
|
|
|
|
- 分页查询:用户列表查询必须使用分页,避免大数据量传输
|
|
|
|
|
- 权限控制:严格区分普通用户和管理员权限
|
|
|
|
|
- 数据脱敏:敏感信息在响应中进行适当脱敏处理
|
|
|
|
|
|
|
|
|
|
[本节为概念性内容,不直接分析具体文件]
|