3分钟掌握JeecgBoot权限注解:@AutoLog+@PermissionData实战指南
你还在手动编写操作日志?还在为数据权限控制写大量重复代码?本文将带你一文掌握JeecgBoot两大核心权限注解——@AutoLog(自动日志)和@PermissionData(数据权限),让权限开发效率提升80%!读完本文你将获得:
- @AutoLog注解3个核心参数的配置方法
- @PermissionData实现数据权限控制的底层逻辑
- 2个注解结合使用的实战案例
- 权限注解避坑指南
一、@AutoLog:一行代码实现操作日志记录
1.1 注解定义与核心参数
@AutoLog注解(定义文件:org/jeecg/common/aspect/annotation/AutoLog.java)通过AOP切面技术自动记录用户操作,核心参数如下:
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| value | String | "" | 日志内容描述(必填) |
| logType | int | 2 | 日志类型:0-操作日志,1-登录日志,2-定时任务 |
| operateType | int | 0 | 操作类型:1-查询,2-添加,3-修改,4-删除 |
| module | ModuleType | COMMON | 模块类型(枚举) |
1.2 使用示例:用户管理模块
在SysUserController中添加用户时自动记录日志:
@AutoLog(value = "用户管理-新增用户", operateType = 2, module = ModuleType.SYSTEM)
@PostMapping("/add")
public Result<?> add(@RequestBody SysUser sysUser) {
sysUserService.save(sysUser);
return Result.OK("新增成功");
}
执行后会在数据库表sys_log中生成如下记录:
INSERT INTO sys_log (id, log_content, log_type, operate_type, module, user_id, create_time)
VALUES ('123', '用户管理-新增用户', 2, 2, 'SYSTEM', 'admin', '2025-10-24 10:00:00');
1.3 工作流程
二、@PermissionData:前端组件级的数据权限控制
2.1 注解原理与参数
@PermissionData注解(定义文件:org/jeecg/common/aspect/annotation/PermissionData.java)通过关联前端页面组件实现数据权限过滤,唯一核心参数:
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| pageComponent | String | "" | 前端页面组件路径(如"system/UserList") |
2.2 权限控制实现
权限切面类PermissionDataAspect.java会拦截注解标记的方法,通过以下步骤实现数据过滤:
- 获取当前用户角色权限
- 根据pageComponent查询预配置的数据权限规则
- 动态拼接SQL条件(如
create_by = '当前用户ID') - 注入查询条件到MyBatisPlus的查询Wrapper中
2.3 使用示例:租户数据隔离
在SysTenantController中控制租户列表只能查看自己有权限的租户:
@PermissionData(pageComponent = "system/TenantList")
@GetMapping("/list")
public Result<?> list(SysTenant tenant) {
List<SysTenant> list = sysTenantService.list(Wrappers.query(tenant));
return Result.OK(list);
}
实际执行的SQL会自动追加权限条件:
SELECT * FROM sys_tenant WHERE del_flag = 0 AND tenant_id IN (
SELECT tenant_id FROM sys_role_tenant WHERE role_id IN (
SELECT role_id FROM sys_user_role WHERE user_id = '当前用户ID'
)
)
三、实战案例:用户编辑功能权限控制
3.1 完整代码实现
@AutoLog(value = "用户管理-编辑用户", operateType = 3, module = ModuleType.SYSTEM)
@PermissionData(pageComponent = "system/UserList")
@PutMapping("/edit")
public Result<?> edit(@RequestBody SysUser sysUser) {
// 数据权限自动校验:只能编辑本部门用户
sysUserService.updateById(sysUser);
return Result.OK("编辑成功");
}
3.2 执行流程
四、避坑指南与最佳实践
- 参数必填项:@AutoLog的value参数必须填写,否则日志内容为空
- 操作类型规范:operateType建议使用枚举常量(如
OperateType.EDIT)而非硬编码数字 - 组件路径匹配:pageComponent必须与前端路由配置完全一致(区分大小写)
- 性能优化:数据权限过滤会增加SQL复杂度,建议对高频查询接口添加缓存
- 权限调试:开启日志DEBUG模式可查看自动生成的权限SQL:
logging:
level:
org.jeecg.common.aspect: debug
五、总结与扩展学习
@AutoLog和@PermissionData注解是JeecgBoot权限体系的核心组件,分别解决了操作审计和数据隔离两大企业级需求。更多权限控制功能可参考:
- 官方文档:权限管理专题
- 代码生成器:自动生成带权限注解的CRUD代码
- 表单权限:通过@Dict注解控制字段级权限
掌握这两个注解,可让你的权限开发从"重复造轮子"转变为"注解驱动开发",真正实现"一行注解,万事大吉"!记得点赞收藏,下期我们将揭秘JeecgBoot的按钮权限控制实现原理。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



