RuoYi-Vue安全审计:敏感操作日志与数据脱敏

RuoYi-Vue安全审计:敏感操作日志与数据脱敏

【免费下载链接】RuoYi-Vue :tada: (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本 【免费下载链接】RuoYi-Vue 项目地址: https://gitcode.com/GitHub_Trending/ru/RuoYi-Vue

在企业级应用开发中,数据安全防护是系统设计的核心环节。RuoYi-Vue作为基于SpringBoot和Vue的前后端分离权限管理系统,内置了完善的敏感操作审计与数据脱敏机制。本文将从操作日志记录、敏感数据脱敏两个维度,详解系统如何通过注解驱动、切面编程和序列化过滤实现全链路安全防护。

一、敏感操作日志:行为追踪的安全防线

操作日志模块通过AOP(面向切面编程)技术,对关键业务操作进行全程记录,为安全审计提供可追溯的行为数据。系统将日志分为系统操作日志、用户访问日志等类型,分别对应不同的安全审计场景。

1.1 注解驱动的日志采集机制

核心注解@Log定义在ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java,支持自定义日志标题、业务类型、操作人类别等元数据。例如在用户管理控制器中,删除操作通过以下注解完成日志标记:

@Log(title = "用户管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{userId}")
public AjaxResult remove(@PathVariable Long userId) {
    return toAjax(userService.deleteUserById(userId));
}

1.2 切面实现日志拦截与存储

日志切面LogAspect位于ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java,通过@Before@AfterReturning注解实现方法执行前后的日志采集。关键处理流程包括:

  1. 请求参数过滤:自动排除密码等敏感字段(定义在EXCLUDE_PROPERTIES常量中)
  2. 操作耗时计算:通过ThreadLocal记录方法执行时间
  3. 异步日志存储:通过AsyncManager将日志异步写入数据库,避免阻塞主流程

日志数据最终封装为SysOperLog对象,存储在系统操作日志表中,包含操作IP、请求URL、方法名称、执行结果等详细信息。

1.3 日志配置与输出策略

系统日志配置文件ruoyi-admin/src/main/resources/logback.xml定义了多维度的日志输出规则:

  • 按级别分离:INFO级别日志输出到sys-info.log,ERROR级别输出到sys-error.log
  • 按业务分类:用户访问日志独立输出到sys-user.log
  • 滚动策略:按天滚动日志文件,保留60天历史记录

关键配置片段如下:

<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/sys-info.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
        <maxHistory>60</maxHistory>
    </rollingPolicy>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>INFO</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>

二、数据脱敏:敏感信息的安全屏障

数据脱敏模块通过自定义注解和JSON序列化过滤,实现敏感字段在传输和展示过程中的自动脱敏,平衡数据可用性与安全性。

2.1 脱敏注解与策略定义

核心注解@Sensitive位于ruoyi-common/src/main/java/com/ruoyi/common/annotation/Sensitive.java,支持通过desensitizedType属性指定脱敏策略。系统预定义了多种脱敏类型,定义在ruoyi-common/src/main/java/com/ruoyi/common/enums/DesensitizedType.java

脱敏类型处理规则示例
USERNAME保留首尾字符,中间用*代替张*三
PHONE保留前3后4位,中间4位用*代替138****5678
ID_CARD保留前4后4位,中间10位用*代替1101********1234
EMAIL保留首字母和域名,中间用*代替z***@ruoyi.com

2.2 序列化过滤实现脱敏

自定义JSON序列化器SensitiveJsonSerializer位于ruoyi-common/src/main/java/com/ruoyi/common/config/serializer/SensitiveJsonSerializer.java,通过以下逻辑实现脱敏:

  1. 在序列化过程中检查字段是否标注@Sensitive注解
  2. 根据注解指定的脱敏类型调用对应的脱敏算法
  3. 管理员角色可绕过脱敏直接查看原始数据(通过SecurityUtils.getLoginUser()判断)

关键实现代码:

@Override
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
    if (desensitization()) { // 判断是否需要脱敏
        gen.writeString(desensitizedType.desensitizer().apply(value));
    } else {
        gen.writeString(value);
    }
}

2.3 应用场景与配置示例

在用户实体类SysUser中,敏感字段通过注解实现自动脱敏:

public class SysUser extends BaseEntity {
    // 其他字段...
    
    @Sensitive(desensitizedType = DesensitizedType.PHONE)
    private String phonenumber;
    
    @Sensitive(desensitizedType = DesensitizedType.EMAIL)
    private String email;
}

当普通用户查询用户列表时,接口返回的JSON数据中敏感字段会自动脱敏;而管理员角色登录系统时,可查看完整的用户信息,实现基于角色的数据权限控制。

三、安全审计最佳实践

3.1 日志配置优化建议

根据系统安全需求,可调整logback.xml中的日志策略:

  • 增加日志轮转大小限制:通过TimeBasedRollingPolicymaxFileSize属性限制单文件大小
  • 关键操作日志加密:对包含敏感信息的日志内容进行加密存储
  • 日志审计告警:结合ELK等日志分析平台,对异常操作模式设置实时告警

3.2 脱敏策略扩展方法

系统支持通过扩展DesensitizedType枚举实现自定义脱敏规则。例如添加银行卡脱敏类型:

BANK_CARD(s -> s.replaceAll("(\\d{4})\\d{12}(\\d{4})", "$1********$2")),

然后在实体类字段上应用:

@Sensitive(desensitizedType = DesensitizedType.BANK_CARD)
private String bankCardNo;

四、总结与展望

RuoYi-Vue通过注解驱动的日志采集和序列化层的数据脱敏,构建了完整的应用层安全防护体系。日志模块实现了操作行为的全程可追溯,脱敏机制则有效防止敏感数据泄露。在实际项目中,建议结合业务场景进一步细化日志粒度和脱敏策略,同时定期对审计日志进行安全分析,及时发现潜在的安全风险。

随着系统复杂度提升,未来可考虑引入更细粒度的动态脱敏策略,结合数据分级分类实现基于上下文的智能脱敏,进一步提升系统的安全性与易用性平衡。

本文档示例代码均来自RuoYi-Vue官方仓库,详细实现可参考对应源代码文件。系统安全配置请结合企业实际安全规范进行调整。

【免费下载链接】RuoYi-Vue :tada: (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本 【免费下载链接】RuoYi-Vue 项目地址: https://gitcode.com/GitHub_Trending/ru/RuoYi-Vue

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值