Skip to content

核心工具(forge-starter-core)

项目核心基础设施模块,提供统一响应、异常处理、会话管理、常用注解等基础能力。

统一响应

RespInfo<T>

所有 API 统一返回 RespInfo<T> 格式:

java
public class RespInfo<T> {
    private Integer code;
    private String message;
    private T data;
    private Long timestamp;
}

静态工厂方法

java
// 成功
RespInfo.success();
RespInfo.success(data);
RespInfo.success("操作成功", data);

// 失败
RespInfo.error();
RespInfo.error("操作失败");
RespInfo.error(500, "系统错误");

// 自定义
RespInfo.build(code, message, data);

异常处理

BusinessException

业务异常,携带错误码和消息:

java
throw new BusinessException(40001, "用户不存在");
throw new BusinessException("操作失败");

GlobalExceptionHandler

通过 @RestControllerAdvice 统一捕获和处理异常,返回 RespInfo 格式。

支持的异常类型:

异常类型HTTP 状态说明
BusinessException400业务异常
MethodArgumentNotValidException400参数校验失败
BindException400绑定异常
ConstraintViolationException400约束违反
HttpRequestMethodNotSupportedException405请求方法不支持
AccessDeniedException403权限不足
MaxUploadSizeExceededException413上传文件过大
NullPointerException500空指针
IllegalArgumentException400非法参数
其他 Exception500系统内部错误

会话管理

LoginUser

当前登录用户信息:

字段说明
userId用户 ID
tenantId租户 ID
username用户名
realName真实姓名
userType用户类型(0=系统管理员,1=租户管理员,2=普通用户)
phone手机号
email邮箱
roleIds角色 ID 列表
roleKeys角色标识列表
permissions权限列表
apiPermissionsAPI 权限映射
orgIds所属组织 ID 列表
mainOrgId主组织 ID
userClient客户端标识

便捷方法

java
loginUser.isAdmin();       // 是否系统管理员
loginUser.isTenantAdmin(); // 是否租户管理员

SessionHelper

基于 Sa-Token 的会话工具类,所有方法为静态:

java
// 获取当前登录用户
LoginUser user = SessionHelper.getLoginUser();

// 获取用户信息
Long userId = SessionHelper.getUserId();
String username = SessionHelper.getUsername();
Long tenantId = SessionHelper.getTenantId();

// 权限校验
boolean hasRole = SessionHelper.hasRole("admin");
boolean hasPerm = SessionHelper.hasPermission("system:user:edit");
boolean hasAny = SessionHelper.hasAnyPermission("system:user:edit", "system:user:view");
boolean hasAll = SessionHelper.hasAllPermissions("system:user:edit", "system:user:delete");

// 角色/组织信息
List<Long> roleIds = SessionHelper.getRoleIds();
List<String> roleKeys = SessionHelper.getRoleKeys();
List<Long> orgIds = SessionHelper.getOrgIds();

// 管理员判断
boolean isAdmin = SessionHelper.isAdmin();
boolean isTenantAdmin = SessionHelper.isTenantAdmin();

常用注解

@ApiEncrypt / @ApiDecrypt

API 请求/响应加解密:

java
@ApiDecrypt  // 解密请求体
@ApiEncrypt  // 加密响应体
@PostMapping("/sensitive")
public RespInfo<User> getSensitiveInfo(@RequestBody DecryptRequest request) {
    // ...
}

@OperationLog

操作日志记录:

java
@OperationLog(
    module = "用户管理",
    type = OperationType.ADD,
    desc = "新增用户",
    saveRequestParams = true,
    saveResponseResult = true
)
@PostMapping("/user")
public RespInfo createUser(@RequestBody UserCreateRequest request) {
    // ...
}

@ApiPermissionIgnore

跳过 API 权限校验:

java
@ApiPermissionIgnore
@GetMapping("/public/info")
public RespInfo getPublicInfo() {
    // ...
}

@IgnoreTenant

跳过多租户隔离:

java
@IgnoreTenant
@GetMapping("/health")
public RespInfo health() {
    return RespInfo.success("ok");
}

@RefreshScope

动态配置刷新(详见 动态配置中心):

java
@Component
@RefreshScope
@ConfigurationProperties(prefix = "app")
@Data
public class AppConfig {
    private String name;
}

分页查询

PageQuery

通用分页查询参数:

java
public class PageQuery {
    private Integer pageNum = 1;     // 当前页码(默认 1,最小 1)
    private Integer pageSize = 10;   // 每页大小(默认 10,最大 100)
    private String orderByColumn;    // 排序字段
    private String isAsc;            // 排序方向(asc/desc)

    public <T> Page<T> toPage();     // 转为 MyBatis-Plus Page
}

使用示例

java
@GetMapping("/page")
public RespInfo<Page<User>> list(PageQuery pageQuery) {
    Page<User> page = userMapper.selectPage(
        pageQuery.toPage(),
        Wrappers.<User>lambdaQuery().eq(User::getStatus, 1)
    );
    return RespInfo.success(page);
}

大数序列化

BigNumberSerializer 自动将 Long/BigInteger 序列化为字符串,避免前端 JavaScript 精度丢失。

配置属性

AuthPropertiesforge.auth

属性默认值说明
enableApiPermissiontrue是否启用 API 权限校验
apiPermissionExcludePaths["/auth/**"]排除路径
enableLoginLocktrue是否启用登录锁定
maxLoginAttempts4最大登录失败次数
lockDuration30m锁定时长
sameAccountLoginStrategy"replace_old"同账号登录策略

CryptoPropertiesforge.crypto

属性默认值说明
enabledtrue是否启用加解密
algorithm"SM4"加密算法
enableDynamicKeytrue是否启用动态密钥
enableDesensitizetrue是否启用数据脱敏

LogPropertiesforge.log

属性默认值说明
enableOperationLogtrue是否启用操作日志
enableLoginLogtrue是否启用登录日志
excludePaths[...]排除路径列表
printOperationLogfalse是否打印操作日志到控制台