Apple经销商ERP系统 - 数据库认证功能说明
概述
系统已成功从硬编码认证改为数据库认证,现在支持从数据库读取用户信息、角色和权限进行JWT认证。
主要变更
1. 新增文件
-
entity/SysUser.java- 系统用户实体类 -
entity/SysRole.java- 系统角色实体类 -
mapper/SysUserMapper.java- 用户数据访问接口 -
service/SysUserService.java- 用户服务接口 -
service/impl/SysUserServiceImpl.java- 用户服务实现 -
resources/mapper/SysUserMapper.xml- MyBatis映射文件
2. 修改文件
-
config/UserDetailsServiceImpl.java- 改为从数据库读取用户信息 -
controller/AuthController.java- 添加登录信息记录功能
功能特性
1. 数据库认证
- ✅ 从
t_sys_user表读取用户信息 - ✅ 支持BCrypt密码加密验证
- ✅ 动态角色和权限管理
- ✅ 用户状态检查(启用/停用)
2. 权限管理
- ✅ 从
t_sys_role表获取用户角色 - ✅ 从
t_sys_menu表获取菜单权限 - ✅ 支持角色-菜单关联权限
- ✅ 动态权限加载
3. 登录记录
- ✅ 记录用户最后登录时间
- ✅ 记录用户最后登录IP
- ✅ 支持获取客户端真实IP
默认账号
| 用户名 | 密码 | 角色 | 权限说明 |
|---|---|---|---|
| admin | admin123 | 系统管理员 | 拥有所有权限 |
| operator | operator123 | 运营人员 | 拥有业务操作权限 |
| auditor | auditor123 | 审核人员 | 拥有审核权限 |
数据库表结构
核心表
-
t_sys_user- 系统用户表 -
t_sys_role- 系统角色表 -
t_sys_user_role- 用户角色关联表 -
t_sys_menu- 系统菜单表 -
t_sys_role_menu- 角色菜单关联表
认证流程
- 用户登录时,系统从
t_sys_user表查询用户信息 - 验证BCrypt加密的密码
- 查询用户关联的角色信息
- 查询角色关联的菜单权限
- 构建Spring Security的UserDetails对象
- 生成JWT令牌
API接口
登录接口
POST /api/auth/login
Content-Type: application/json
{
"username": "admin",
"password": "admin123"
}
响应示例
{
"code": 200,
"message": "登录成功",
"data": {
"token": "eyJhbGciOiJIUzUxMiJ9...",
"refreshToken": "eyJhbGciOiJIUzUxMiJ9...",
"username": "admin"
}
}
测试方法
1. 数据库测试
执行测试脚本验证数据库结构:
-- 执行测试脚本
source database/scripts/05_test_database_auth.sql
2. API测试
使用Postman或curl测试登录接口:
curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}'
3. 权限测试
登录后使用JWT令牌访问受保护的接口:
curl -X GET http://localhost:8080/api/auth/userinfo \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
配置说明
1. 数据库配置
确保application.yml中配置了正确的数据库连接:
spring:
datasource:
url: jdbc:mysql://localhost:3306/apple_erp
username: apple_erp
password: apple_erp123
2. MyBatis配置
确保application.yml中配置了MyBatis映射文件路径:
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
安全特性
1. 密码安全
- 使用BCrypt加密存储密码
- 支持密码强度验证
- 防止密码明文存储
2. 权限控制
- 基于角色的访问控制(RBAC)
- 细粒度权限管理
- 动态权限加载
3. 会话管理
- JWT令牌认证
- 令牌过期机制
- 刷新令牌支持
故障排除
1. 认证失败
- 检查用户名和密码是否正确
- 确认用户状态为启用(status=1)
- 验证数据库连接是否正常
2. 权限不足
- 检查用户是否分配了角色
- 确认角色是否关联了菜单权限
- 验证角色和菜单状态是否启用
3. 数据库连接问题
- 检查数据库服务是否启动
- 验证连接配置是否正确
- 确认数据库表是否创建完成
扩展功能
1. 添加新用户
INSERT INTO t_sys_user (username, real_name, password, phone, email, status, remark, create_by)
VALUES ('newuser', '新用户', '$2a$10$...', '13800138000', 'newuser@example.com', 1, '新用户', 'admin');
2. 分配角色
INSERT INTO t_sys_user_role (user_id, role_id, create_by)
VALUES (用户ID, 角色ID, 'admin');
3. 修改密码
UPDATE t_sys_user
SET password = '$2a$10$新的BCrypt哈希'
WHERE username = '用户名';
注意事项
- 密码加密: 所有密码必须使用BCrypt加密存储
-
软删除: 使用
del_flag字段进行软删除,不要物理删除数据 - 状态管理: 用户和角色都有状态字段,停用后无法登录
- 权限缓存: 权限信息在用户登录时加载,修改权限后需要重新登录生效
- 日志记录: 系统会记录用户登录时间和IP,便于安全审计
文档版本: v1.0
创建时间: 2025-01-27
维护人员: 开发团队