跳到主要内容
版本:Next

epoch-app-core - 应用核心模块

1. 模块概述

epoch-app-core 是 epoch-boot 的应用核心模块,提供了应用开发所需的基础功能支持,包括用户认证、权限管理、日志管理等。该模块是其他业务模块的基础,所有业务模块都依赖于该模块。

2. 模块结构

epoch-app-core/
├── auth/ # 认证授权
├── config/ # 配置管理
├── entity/ # 实体类
├── enums/ # 枚举类
├── exception/ # 异常处理
├── mapper/ # Mapper 接口
├── service/ # 服务层
├── utils/ # 工具类
└── vo/ # 视图对象

3. 核心功能

3.1 认证与授权 (auth)

提供用户认证与授权功能,基于 Sa-Token 实现,支持 JWT、Cookie 等认证方式。

主要功能:

  • 用户登录与登出
  • 角色认证
  • 权限验证
  • JWT 令牌生成与验证
  • 会话管理
  • 记住我功能

使用示例:

// 用户登录
@PostMapping("/login")
public ResponseResult login(@RequestBody LoginRequest request) {
// 验证用户名和密码
User user = userService.validateUser(request.getUsername(), request.getPassword());

// 生成令牌
String token = authService.login(user);

// 返回令牌
return ResponseResult.success("登录成功", token);
}

// 权限验证
@PreAuth("hasPermission('system:user:list')")
@GetMapping("/user/list")
public ResponseResult listUser() {
// 获取用户列表
List<User> userList = userService.list();
return ResponseResult.success(userList);
}

3.2 用户管理

提供用户信息管理功能,包括用户的增删改查、密码修改等。

主要功能:

  • 用户信息查询
  • 用户信息添加
  • 用户信息修改
  • 用户信息删除
  • 密码修改
  • 用户状态管理

使用示例:

// 获取当前用户信息
@GetMapping("/user/current")
public ResponseResult getCurrentUser() {
Long userId = UserUtils.getCurrentUserId();
User user = userService.getById(userId);
return ResponseResult.success(user);
}

// 修改用户信息
@PutMapping("/user")
public ResponseResult updateUser(@RequestBody UserRequest request) {
userService.updateUser(request);
return ResponseResult.success("用户信息修改成功");
}

3.3 角色管理

提供角色信息管理功能,包括角色的增删改查、权限分配等。

主要功能:

  • 角色信息查询
  • 角色信息添加
  • 角色信息修改
  • 角色信息删除
  • 角色权限分配

使用示例:

// 获取角色列表
@GetMapping("/role/list")
public ResponseResult listRole() {
List<Role> roleList = roleService.list();
return ResponseResult.success(roleList);
}

// 分配角色权限
@PostMapping("/role/assignPermission")
public ResponseResult assignPermission(@RequestBody RolePermissionRequest request) {
roleService.assignPermission(request.getRoleId(), request.getPermissionIds());
return ResponseResult.success("权限分配成功");
}

3.4 权限管理

提供权限信息管理功能,包括权限的增删改查、权限验证等。

主要功能:

  • 权限信息查询
  • 权限信息添加
  • 权限信息修改
  • 权限信息删除
  • 权限验证

使用示例:

// 检查用户是否有权限
if (permissionService.hasPermission(userId, "system:user:add")) {
// 执行添加用户操作
}

3.5 日志管理

提供系统日志管理功能,包括操作日志、登录日志、异常日志等。

主要功能:

  • 操作日志记录
  • 登录日志记录
  • 异常日志记录
  • 日志查询
  • 日志导出

使用示例:

// 记录操作日志
@OperationLog("添加用户")
@PostMapping("/user")
public ResponseResult addUser(@RequestBody UserRequest request) {
userService.addUser(request);
return ResponseResult.success("用户添加成功");
}

3.6 系统配置管理

提供系统配置管理功能,支持动态配置系统参数。

主要功能:

  • 系统配置查询
  • 系统配置修改
  • 配置缓存管理

使用示例:

// 获取系统配置
String configValue = systemConfigService.getConfigValue("system.title");

// 修改系统配置
SystemConfigRequest request = new SystemConfigRequest();
request.setKey("system.title");
request.setValue("Epoch 管理系统");
systemConfigService.updateConfig(request);

3.7 数据权限控制

提供数据权限控制功能,支持基于角色的数据访问控制。

主要功能:

  • 数据权限规则定义
  • 数据权限验证
  • 数据过滤

使用示例:

// 查询用户列表,自动应用数据权限过滤
List<User> userList = userService.listWithDataPermission();

4. 设计理念

4.1 基于权限的访问控制

采用 RBAC (Role-Based Access Control) 模型,实现基于角色的权限管理,支持细粒度的权限控制。

4.2 可扩展性

提供扩展点和配置选项,支持自定义认证方式、权限规则等。

4.3 安全可靠

基于成熟的安全框架 Sa-Token 实现,确保认证和授权的安全性。

4.4 易用性

提供简洁的 API 和自动配置,减少使用成本,提高开发效率。

5. 使用指南

5.1 引入依赖

<dependency>
<groupId>com.epoch</groupId>
<artifactId>epoch-app-core</artifactId>
<version>${epoch.version}</version>
</dependency>

5.2 配置说明

在 application.yml 中配置相关参数:

# Sa-Token 配置
sa-token:
token-name: Authorization
timeout: 3600
activity-timeout: 3600
is-concurrent: true
is-share: false
token-style: jwt
jwt-secret-key: epoch-secret-key

# 系统配置
epoch:
app:
title: Epoch 管理系统
version: 3.4.0
description: Epoch 企业级应用开发平台

5.3 启动应用

在 Spring Boot 应用的启动类上添加 @EnableEpochAppCore 注解:

@SpringBootApplication
@EnableEpochAppCore
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

6. 扩展机制

6.1 自定义认证方式

可以通过实现 AuthService 接口自定义认证方式:

@Component
public class CustomAuthService implements AuthService {
@Override
public String login(User user) {
// 自定义登录逻辑
return "custom-token";
}

@Override
public void logout() {
// 自定义登出逻辑
}
}

6.2 自定义权限规则

可以通过实现 PermissionService 接口自定义权限规则:

@Component
public class CustomPermissionService implements PermissionService {
@Override
public boolean hasPermission(Long userId, String permission) {
// 自定义权限验证逻辑
return true;
}
}

7. 版本变更

7.1 主要变更

  • 3.4.0

    • 升级 Sa-Token 到 1.44.0
    • 优化认证流程,提高安全性
    • 新增数据权限控制功能
    • 完善日志管理功能
  • 3.3.0

    • 重构认证模块,支持 JWT 认证
    • 优化权限管理功能,支持更细粒度的权限控制
    • 新增系统配置管理功能
  • 3.2.0

    • 初始版本,提供用户认证、权限管理、日志管理等基础功能

8. 常见问题

8.1 如何自定义登录逻辑?

可以通过实现 AuthService 接口自定义登录逻辑:

@Component
public class CustomAuthService implements AuthService {
@Override
public String login(User user) {
// 自定义登录逻辑
return "custom-token";
}
}

8.2 如何实现数据权限控制?

可以通过实现 DataPermissionService 接口自定义数据权限规则:

@Component
public class CustomDataPermissionService implements DataPermissionService {
@Override
public String getDataPermissionSql(Long userId, String tableAlias) {
// 自定义数据权限 SQL
return " and " + tableAlias + ".create_user_id = " + userId;
}
}

8.3 如何配置 JWT 密钥?

在 application.yml 中配置:

sa-token:
jwt-secret-key: your-secret-key

8.4 如何修改令牌过期时间?

在 application.yml 中配置:

sa-token:
timeout: 7200 # 令牌过期时间,单位:秒

8.5 如何记录操作日志?

使用 @OperationLog 注解:

@OperationLog("添加用户")
@PostMapping("/user")
public ResponseResult addUser(@RequestBody UserRequest request) {
userService.addUser(request);
return ResponseResult.success("用户添加成功");
}

9. 安全建议

  1. 使用 HTTPS 协议:确保所有 API 请求都通过 HTTPS 协议传输,防止数据泄露
  2. 定期更换密钥:定期更换 JWT 密钥,提高系统安全性
  3. 设置合理的令牌过期时间:根据业务需求设置合理的令牌过期时间,平衡安全性和用户体验
  4. 使用强密码策略:实施强密码策略,要求用户使用包含大小写字母、数字和特殊字符的密码
  5. 限制登录尝试次数:限制同一账号的登录尝试次数,防止暴力破解
  6. 定期清理无效会话:定期清理无效的用户会话,释放系统资源

10. 性能优化

  1. 缓存优化:将用户信息、角色信息、权限信息等频繁访问的数据缓存到 Redis 中,减少数据库查询
  2. SQL 优化:优化数据库查询语句,使用索引提高查询效率
  3. 批量操作:对于批量数据操作,使用批量插入、更新等方式,减少数据库交互次数
  4. 异步处理:对于非实时性要求高的操作,如日志记录,使用异步处理方式,提高响应速度

11. 监控与维护

  1. 登录监控:监控用户登录情况,及时发现异常登录行为
  2. 权限监控:监控权限使用情况,及时发现异常权限访问
  3. 性能监控:监控系统性能,包括响应时间、并发数等,及时发现性能瓶颈
  4. 日志分析:定期分析系统日志,及时发现系统问题和安全隐患