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 做鉴权(LoggerMvcConfig 仅 implements WebMvcConfigurer,未重写任何方法、未注册 Bean)。访问控制完全依赖 obpm-common 提供的共享前置过滤器:
PassFilter(obpm-commonCommWebMvcConfig.filterRegistrationBeanPassFilter1,order=HIGHEST_PRECEDENCE):命中白名单 URL(模块首页、/health、/actuator/health、静态资源后缀、magic-api 等)即标记request.setAttribute("pass", true)放行。CommonSecurityFilter(obpm-commonCommWebMvcConfig.filterRegistrationBeanCommonSecurityFilter1,URL 模式/*,order=-1):所有模块共享,行为如下——- 携带合法
systemToken请求头(系统间 Feign 调用,JWT 内username固定为systemToken)→ 标记pass=true放行; - 仅允许
GET/POST/HEAD/OPTIONS方法,其他方法返回 HTTP405(HTML 错误页);OPTIONS为浏览器 CORS 预检放行; Environment.isReady()为 false 时返回 HTTP500,响应体「系统正在启动中,请稍后再试!」;/v3/api-docs、/swagger-ui、/druid须持有效 designerToken 或 adminToken;/actuator/health放开;其余/actuator/**返回401(无响应体);- 其他请求直接
chain.doFilter,不校验业务 accessToken。
logger 模块所有端点(
DELETE /logs、GET /logs、GET /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 | int | 总行数 |
| linesPerPage | int | 每页行数 |
| pageNo | int | 当前页码 |
| datas | array |
当前页日志集合;可能为 null(开启三员管理且当前用户不属 SECADMIN/AUDITOR 时返回 null) |
| pageCount | int | 总页数(getRowCount() / linesPerPage,由 DataPackage.getPageCount() 计算) |
Log 字段:id、userId、operator、description、type、ip、applicationid、domainid、date、sortId、result。
形态二:空响应体(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 | 系统正在启动中(由 CommonSecurityFilter 在 Environment.isReady() 为 false 时返回,HTML 错误页) |
覆盖说明¶
本阶段覆盖 obpm-logger 工作树下的 LogController(操作日志,3 个端点,含删除日志、按多条件分页查询日志、导出操作日记为 Excel)。logger 模块有端点控制器已**全部覆盖**。