Java SDKAOP 切面
@PermissionVerify
基于 scope 的权限验证注解
@PermissionVerify
@PermissionVerify 注解用于在 Controller 方法执行前验证当前用户是否拥有所需的权限(scope)。
功能说明
通过 @PermissionVerify 注解声明方法所需的权限,SDK 会在方法执行前自动检查当前用户的 Token scope 是否满足要求。若权限不足,直接返回 403 JSON 响应并抛出 PermissionDeniedException,方法不会被执行。
注解参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
value | String[] | - | 所需的权限(scope)字符串 |
requireAll | boolean | true | 是否需要满足所有权限(true = AND,false = OR) |
message | String | "权限不足" | 权限不足时的错误提示信息 |
使用方式
方法级别
在 Controller 方法上使用:
@RestController
@RequestMapping("/api/admin")
@PermissionVerify(value = "admin", message = "需要管理员权限")
public class AdminController {
// 继承类级别的 admin 权限要求
@GetMapping("/dashboard")
public BaseResponse<String> dashboard() {
return BaseResponse.success("ok", "管理面板");
}
// 方法级别覆盖:需要 admin 或 settings 任一权限
@GetMapping("/settings")
@PermissionVerify(value = {"admin", "settings"}, requireAll = false)
public BaseResponse<String> settings() {
return BaseResponse.success("ok", "设置");
}
}多权限组合
@RestController
@RequestMapping("/api")
public class DemoController {
// AND 模式:必须同时拥有 user:read 和 user:write
@GetMapping("/user/edit")
@PermissionVerify(value = {"user:read", "user:write"})
public BaseResponse<String> editUser() {
return BaseResponse.success("ok", "编辑用户");
}
// OR 模式:拥有 admin 或 super_admin 任一即可
@GetMapping("/manage")
@PermissionVerify(value = {"admin", "super_admin"}, requireAll = false)
public BaseResponse<String> manage() {
return BaseResponse.success("ok", "管理");
}
}类级别与方法级别
方法级别的 @PermissionVerify 会覆盖类级别的注解。也就是说,如果类和方法上都声明了该注解,只有方法级别的注解会生效。
推荐将通用的权限要求声明在类级别上,特殊的权限要求在方法级别覆盖。
权限不足响应
当权限验证不通过时,SDK 会向客户端写入 403 JSON 响应:
{
"code": 403,
"message": "权限不足",
"data": null
}如果指定了自定义 message,响应中的 message 字段会使用你设置的值。