菜单执行(MenuController)¶
菜单执行接口:按当前用户权限与多语言设置返回当前应用可见的菜单树(含移动端菜单、视图/统计图/报表/大屏/OLAP 等链接资源的 actionContent 经 DES 加密、视图统计行数等)。
- 接口类型:REST 资源(
@Component继承AbstractRuntimeController;类级produces = MediaType.APPLICATION_JSON_VALUE,方法返回类型为Resource,由 Spring Jackson 序列化为 JSON,据源码) - 基址:
${myapps.context-path.runtime:}/api/runtime/{applicationId} - Tag:菜单执行模块
公共说明¶
- 鉴权(据源码):类级基址位于
/api/runtime/**,在RestSecurityHandlerInterceptor覆盖范围内,且不在豁免名单(豁免仅覆盖/api/runtime/login.*、/api/runtime/dingding/authlogin、/api/runtime/synchronization.*、URI 以/showjrxml结尾、含/getCustomColumnsInfos、含/accessToken、含/macro、以/clear结尾、含/pages/等,详见 login.md「公共说明 · 鉴权」)。拦截器走Security.getUserIdFromToken(request),未取到再尝试Security.getDebugUserIdFromToken(request),两者皆无则拒绝。故需 accessToken(或 debugToken),可通过 Cookie / 请求头 / query 参数任一方式传递。控制器内getUser()(继承自AbstractRuntimeController)必须能取到非空WebUser,否则在DesUtil.decryptTextByUserId(applicationId, getUser().getId())时即抛 NPE。 - 路径变量
{applicationId}:必填,经 DES 加密(按当前执行用户密钥),服务端在方法入口处DesUtil.decryptTextByUserId(applicationId, getUser().getId())解密。 - 响应结构:本控制器响应使用统一
Resource(见 ../index.md「统一响应结构」)。 - 资源 Id 加密:菜单链接类型为视图/统计图/报表/大屏/OLAP(
LINKTYPE_VIEW/LINKTYPE_CHART/LINKTYPE_REPORT/LINKTYPE_BIGSCREEN/LINKTYPE_OLAP)时,其actionContent字段在返回前由DesUtil.encryptTextByUserId(..., getUser().getId())加密。
1. 获取菜单¶
返回当前用户在指定应用下可见的菜单树(含 PC 端 / 移动端),按用户角色过滤、按多语言规则翻译、对菜单链接对应的视图/统计图等资源 Id 进行 DES 加密。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/menus(完整:{runtime-context}/api/runtime/{applicationId}/menus) - 鉴权:是(需 accessToken,据源码)
- Tag:菜单执行模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 应用Id(DES 加密密文) |
| isMobile | query | boolean | 否 | 是否移动端,默认 false;为 true 时读取移动端菜单模型(MOBILE_MENU_PATH_SUFFIX/MOBILE_MENU_FILE_SUFFIX) |
请求示例¶
GET /api/runtime/__APPID__/menus?isMobile=false HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...
响应¶
结构:统一 Resource(见 ../index.md「统一响应结构」)。
data:List<ResourceVO>,菜单树(顶级菜单持 children,由 getTreeMenus(...) 递归构建)。每个 ResourceVO 含 id/name/description/linkType/actionContent/showType/permissionType/children/totalRow 等字段。
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": [
{
"id": "__MENUID__",
"name": "{*[label^name^true^__APPID__]*}",
"description": "{*[label^name^true^__APPID__]*}",
"linkType": "01",
"actionContent": "__ENC_VIEWID__",
"showType": 0,
"permissionType": "PUBLIC",
"children": []
}
],
"errors": null
}
失败示例: