第十四章. 系统管理(七)系统审计:通知公告与日志管理

第十四章. 系统审计:通知公告与日志管理

摘要:本章我们将学习系统管理中两个“保障型”模块:通知公告与日志管理。我们将重点探索 RVP 5.x 新增的 SSE 实时消息推送机制,并深入理解“操作日志”和“登录日志”在系统安全审计与问题追溯中的核心价值。


14.1. 通知公告:基于 SSE 的实时推送

在“系统管理”菜单中,“通知公告”是一个相对简单的功能模块,其核心是一个带“富文本编辑器”的增删改查(CRUD)。

我们点击 系统管理 -> 通知公告,可以新增或修改公告。

在“修改”界面,我们可以看到它支持完整的富文本编辑,包括设置字体、样式、上传图片等。

image-20251111221013946

[重点] 5.x 的 SSE 实时推送

如果仅仅是 CRUD,这个模块的价值并不大。RVP 5.x 为其赋予了一个核心的现代化功能:基于 SSE (Server-Sent Events) 的实时消息推送

我们来做一个实验:

  1. 保持 admin 账号在线。
  2. 点击“新增”,创建一个“APP 更新通知”并“确定”。
  3. 现象:点击“确定”的瞬间,admin 浏览器右上角的“小铃铛”立刻出现了红点,点开就能看到这条新公告。

这就是 SSE 在起作用。系统在新增公告后,会向所有 当前在线 的客户端推送一个“广播”事件。

关键:广播机制(非持久化收件箱)

这里我们必须厘清一个二次开发中至关重要的概念:RVP 提供的这个“小铃铛”不是一个持久化的“用户收件箱”

我们通过两个现象来证明这一点:

  1. 现象一:登录即推送“欢迎”
    我们退出登录,然后重新登录。每次登录,都会收到一条“欢迎登录”的消息。这证明“小铃铛”里的消息并 不是 存储在数据库中的“未读列表”,而更像是一个临时的“事件”展示器。
  2. 现象二:离线用户收不到
    • 我们保持 admin 登录。
    • 我们让 Prorise 账号 保持离线
    • admin 发布一条“新公告”。
    • Prorise 此时 再登录
    • 结果Prorise 不会 收到“新公告”的“小铃铛”提醒。他只会收到那条“欢迎登录”的消息。

核心结论(二次开发必读):
RVP 5.x 内置的通知公告是一个 “广播” 系统。它只负责向 当前在线 的用户推送实时消息。

  • 优点:轻量、实时,技术栈新(SSE)。
  • 局限:如果用户不在线,他就会 错过 这个推送。他必须手动点开“通知公告”菜单(如果他有权限)才能查阅历史记录。
  • 二次开发:如果你的项目需要一个像 QQ、微信那样的、能记录“未读/已读”状态的、持久化的“我的消息”收件箱,那么这个模块只是一个 起点。你将需要在此基础上进行扩展,比如创建一张 sys_user_notice 关联表来记录每个用户的读取状态。

14.2. 日志管理(一):操作日志 (AOP 审计)

在系统的运维阶段,“日志管理”是我们排查问题的“黑匣子”。我们点击 系统管理 -> 日志管理,它分为“操作日志”和“登录日志”。

我们先看“操作日志”(sys_oper_log)。

这个模块记录了用户(主要是 admin)在后台的 所有关键操作:修改了哪个模块、执行了什么操作、成功还是失败。

image-20251111221151911

这个功能是如何实现的?
它并非由开发者在每个“修改”、“删除”方法里手动编写 log.save() 代码。RVP 在后端使用了 AOP (面向切面编程)

开发者只需要在需要被审计的 Controller 方法上加一个 @Log 注解(例如 @Log(title = "参数管理", businessType = BusinessType.DELETE)),RVP 的 AOP 切面就会在方法执行前后,自动捕获信息并存入数据库。

操作日志的真正价值在于 问题追溯

场景:第二天上班,你发现“参数设置”里某个关键 IP 被改错了,导致业务不通。

排查

  1. 进入“操作日志”。
  2. 在“系统模块”搜索框中输入 参数管理
  3. 在“操作类型”中选择 修改
  4. 点击“搜索”。

系统会立刻列出所有对“参数管理”的修改记录,清楚地显示:谁(操作人员)在什么时间(操作时间)从哪个 IP(操作地址)修改了什么(请求参数)

我们还可以点击任意一条日志的“详细”按钮,查看“黑匣子”的内部。

image-20251111221324449

这里记录了:

  • 请求信息:请求的 URL、方法(PUT)。
  • 调用方法:精确到后端 com.ruoyi... 的哪个类、哪个方法。
  • 请求参数(重点) Prorise 提交的 JSON 数据 被完整记录下来了。
  • 返回参数 / 异常信息
    • 如果操作成功,这里会显示 null 或成功信息。
    • 如果操作失败(比如我们去删除一个“内置参数”),这里会 完整记录 Java 的异常堆栈信息(如 内置参数不能删除),是开发者 Debug 的利器。

管理员可以通过“清空”或“删除”来管理日志,也可以“导出”Excel 进行长期归档。


14.3. 日志管理(二):登录日志 (安全与解锁)

如果说“操作日志”是追溯“谁动了我的数据”,“登录日志”就是追溯“谁试图进入我的系统”。

我们切换到“登录日志”(sys_logininfor)标签页。

这里记录了每一次登录尝试的详细信息:

image-20251111221420616

  • 登录账号Prorise, admin
  • 客户端/设备PC, Android
  • 登录 IP / 地点
  • 操作系统 / 浏览器
  • 登录状态成功 还是 失败
  • 提示消息:如果失败,原因是什么(如 密码输入错误

“登录日志”不仅仅是“看”,它还是一个 交互式的安全工具。RVP 内置了防暴力破解机制:同一账号连续输错 5 次密码,该账号将被锁定 10 分钟

这个“锁定”功能,正是通过“登录日志”来解除的。

我们来模拟一次“攻击”与“解锁”的完整流程:

  1. 模拟攻击
    • 打开一个新的浏览器(或退出登录)。
    • 输入用户名 Prorise
    • 故意 输入 5 次错误的密码。
    • 在第 5 次失败后,系统提示:“密码输入错误 5 次,账户锁定 10 分钟”。
  2. 验证锁定
    • 此时,即使你输入了 正确 的密码,系统依然提示:“账户已锁定,请 10 分钟后再试”。用户已无法登录。
  3. 管理员介入(解锁)
    • admin 登录后台,进入“登录日志”模块,点击“刷新”。
    • 会看到 Prorise 刚才的 5 条“失败”记录,以及后续的“锁定”记录。
    • 管理员 选中 Prorise 的任意一条登录记录,点击顶部的“解锁”按钮。
    • 系统提示“解锁成功”。
  4. 恢复登录
    • Prorise 所在的浏览器,无需等待 10 分钟,立刻使用 正确 密码尝试登录。
    • 结果:登录成功。

这个“解锁”功能,是 RVP 登录日志模块的 核心价值,它将“日志审计”和“安全运维”完美地结合在了一起。


14.4 第十四章总结

本章我们学习了两个“保障型”模块。

  • 通知公告:它是一个 SSE 广播系统,用于向 在线用户 推送实时消息。我们必须清楚它 不是 一个持久化的“用户收件箱”,离线用户会错过推送。
  • 操作日志:它是一个基于 AOP 的“审计黑匣子”,忠实记录了所有关键操作的“输入参数”和“异常信息”,是 问题追溯 的第一现场。
  • 登录日志:它不仅是“审计日志”,更是一个 交互式安全工具。它记录登录尝试,并在用户被“防爆破解”机制锁定时,提供**“解锁”**功能,是管理员的必备工具。