Name Last Update
..
aspect Loading commit data...
config Loading commit data...
controller Loading commit data...
dto Loading commit data...
entity Loading commit data...
exception Loading commit data...
mapper Loading commit data...
service Loading commit data...
utils Loading commit data...
vo Loading commit data...
AppleErpApplication.java Loading commit data...
README_DATABASE_AUTH.md Loading commit data...

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 - 角色菜单关联表

认证流程

  1. 用户登录时,系统从t_sys_user表查询用户信息
  2. 验证BCrypt加密的密码
  3. 查询用户关联的角色信息
  4. 查询角色关联的菜单权限
  5. 构建Spring Security的UserDetails对象
  6. 生成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 = '用户名';

注意事项

  1. 密码加密: 所有密码必须使用BCrypt加密存储
  2. 软删除: 使用del_flag字段进行软删除,不要物理删除数据
  3. 状态管理: 用户和角色都有状态字段,停用后无法登录
  4. 权限缓存: 权限信息在用户登录时加载,修改权限后需要重新登录生效
  5. 日志记录: 系统会记录用户登录时间和IP,便于安全审计

文档版本: v1.0
创建时间: 2025-01-27
维护人员: 开发团队