跳转至

Logger 模块 API

Logger 模块是 MyApps 平台的**操作日志服务**(obpm-logger),提供操作日志的查询、删除、Excel 导出能力,并按三员管理(安全保密员 / 审计员 / 系统管理员)实施行级可见性过滤。该模块的 context-path 占位符为 ${myapps.context-path.logger:}(部署时替换为具体上下文路径,缺省为空;lite 统一打包下为 /,此时模块路径前缀多一层 /logger)。

注:本仓库根 docs/restful-api/index.md「服务与基址」表暂未单独列出 logger 行;模块无独立 application*.yml 公开源码(端口由部署侧 server.port 决定)。本模块路径前缀与 URL 模式均以源码为准。

覆盖进度:1 / 1 控制器(已覆盖 LogController)

Logger 模块共有 1 个有端点的控制器,合计 3 个端点。源码树中另有 UserUtil(控制器包内的工具类,从 <storageRoot>/superuser.json 加载三员账号,无端点)不单独成文。

已文档化控制器

文件 中文名 基址 端点数
log.md LogController(操作日志) ${myapps.context-path.logger:}/logs 3

鉴权说明

(据源码)logger 模块**不使用 Spring Security**(全模块无 org.springframework.security 引用),不注册任何 Servlet Filter 或 HandlerInterceptor 做鉴权LoggerMvcConfigimplements WebMvcConfigurer,未重写任何方法、未注册 Bean)。访问控制完全依赖 obpm-common 提供的共享前置过滤器:

  • PassFilter(obpm-common CommWebMvcConfig.filterRegistrationBeanPassFilter1,order=HIGHEST_PRECEDENCE):命中白名单 URL(模块首页、/health/actuator/health、静态资源后缀、magic-api 等)即标记 request.setAttribute("pass", true) 放行。
  • CommonSecurityFilter(obpm-common CommWebMvcConfig.filterRegistrationBeanCommonSecurityFilter1,URL 模式 /*,order=-1):所有模块共享,行为如下——
  • 携带合法 systemToken 请求头(系统间 Feign 调用,JWT 内 username 固定为 systemToken)→ 标记 pass=true 放行;
  • 仅允许 GET/POST/HEAD/OPTIONS 方法,其他方法返回 HTTP 405(HTML 错误页);OPTIONS 为浏览器 CORS 预检放行;
  • Environment.isReady() 为 false 时返回 HTTP 500,响应体「系统正在启动中,请稍后再试!」;
  • /v3/api-docs/swagger-ui/druid 须持有效 designerToken 或 adminToken;/actuator/health 放开;其余 /actuator/** 返回 401(无响应体);
  • 其他请求直接 chain.doFilter不校验业务 accessToken

logger 模块所有端点(DELETE /logsGET /logsGET /logs/export均不在 PassFilter 白名单内,但因 CommonSecurityFilter 不做 token 校验,HTTP 层可匿名访问

控制器内对用户身份的使用

LogController.getUser() 通过 Security.getUserIdFromToken(request) 解析 accessToken 取 userId,再用 UserUtil.find(id)<storageRoot>/superuser.json 加载 SuperUserVO(三员管理账号)。该返回值决定行级可见性:

  • 未开启三员管理(PropertyUtil.getBoolean("security.mode") 为 false)或 user == null 时:返回全量日志(无过滤)。
  • 开启三员管理时:仅 SuperUserVO.SECADMIN(安全保密员)与 AUDITOR(审计员)能看到对应行级范围的日志;其他类型返回 null

注意:删除端点 remove 与导出端点 excelExportUserAndDept 未读取用户身份,因此 HTTP 层未鉴权时这两个端点可被任意调用方操作。生产部署应在 manager 控制台或受控网络内暴露该模块。

完整鉴权机制与错误码说明见:顶层 index.md

响应结构与错误码

logger 模块控制器返回**多种响应形态**,均不采用顶层统一 Resource

形态一:DataPackage<Log>(queryLogs)

queryLogs 返回 obpm-common 提供的分页结构 DataPackage<Log>,序列化为 JSON:

{
  "rowCount": 100,
  "linesPerPage": 10,
  "pageNo": 1,
  "datas": [ { ...Log... } ]
}
字段 类型 说明
rowCount int 总行数
linesPerPage int 每页行数
pageNo int 当前页码
datas array 当前页日志集合;可能为 null(开启三员管理且当前用户不属 SECADMIN/AUDITOR 时返回 null
pageCount int 总页数(getRowCount() / linesPerPage,由 DataPackage.getPageCount() 计算)

Log 字段:iduserIdoperatordescriptiontypeipapplicationiddomainiddatesortIdresult

形态二:空响应体(remove)

remove 返回 void,HTTP 200,无响应体。失败时抛 Exception(由 CommonsExceptionResolver 统一映射)。

形态三:Excel 二进制流(excelExportUserAndDept)

excelExportUserAndDept 直接操作 HttpServletResponse

  • Content-Type: appliction/excel(注:源码原样拼写,缺 a,应为 application/excel,浏览器仍可识别);
  • Content-Disposition: attachment;fileName=<URL编码后的"操作日记.xls">
  • 响应体:XSSFWorkbook 写入的 .xls 二进制流。

错误码补充

logger 模块**未引入模块专属业务错误码**。鉴权 / 启动层引入以下与统一 Resource 不同的纯 HTTP 状态码:

errcode / HTTP HTTP 含义
405 405 HTTP 方法不被允许(由 CommonSecurityFilter 拦截,仅允许 GET/POST/HEAD/OPTIONS,返回 HTML 错误页)
500 500 系统正在启动中(由 CommonSecurityFilterEnvironment.isReady() 为 false 时返回,HTML 错误页)

覆盖说明

本阶段覆盖 obpm-logger 工作树下的 LogController(操作日志,3 个端点,含删除日志、按多条件分页查询日志、导出操作日记为 Excel)。logger 模块有端点控制器已**全部覆盖**。