Class AbstractAuditLogAPMEventListener
- All Implemented Interfaces:
EventListener, org.springframework.context.ApplicationListener<APMEvent>
- Direct Known Subclasses:
AuditLogAPMEventListener
继承自APMEventListener,提供审计日志的保存功能
主要功能: 1. 将APM日志转换为审计日志(AuditLog) 2. 支持分表存储(通过TableSuffixProvider提供表名后缀) 3. 自动创建分表(如果不存在) 4. 过滤Spring MVC内置对象,避免序列化异常 5. 提供扩展点供子类实现(tagName、operationName、ignore等)
子类需要实现的抽象方法: - createTable(String suffix):创建分表 - saveLog(String suffix, AuditLog log):保存审计日志 - tagName(Class, Method):获取业务模块标签 - operationName(Class, Method):获取业务操作名称 - ignore(APMLog, Class, Method):是否跳过记录审计日志
使用示例:
public class MyAuditLogListener extends AbstractAuditLogAPMEventListener {
public MyAuditLogListener(Dao dao, String application, TableSuffixProvider provider) {
super(dao, application, provider);
}
@Override
public void createTable(String suffix) {
// 创建审计日志表
}
@Override
public void saveLog(String suffix, AuditLog log) {
// 保存审计日志到数据库
}
@Override
public String tagName(Class<?> clazz, Method method) {
return "用户管理";
}
@Override
public String operationName(Class<?> clazz, Method method) {
return "创建用户";
}
@Override
public boolean ignore(APMLog log, Class<?> clazz, Method method) {
return false; // 不跳过任何日志
}
}
- Author:
- Kerbores(kerbores@riemann.tech)
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected AuditLogbeforeSave(AuditLog auditLog) 审计日志入库前处理钩子(H15)abstract voidcreateTable(String suffix) 创建分表voidhandleAPMLog(APMLog log) 处理APM日志(抽象方法,子类必须实现)voidhandleAPMLog(APMLog log, @Nullable Class<?> clazz, @Nullable Method method) 处理APM日志(带Class和Method信息)abstract boolean判断是否跳过记录审计日志voidinit()初始化服务器IP地址booleanabstract StringoperationName(@Nullable Class<?> clazz, @Nullable Method method) 获取业务操作名称abstract void保存审计日志abstract String获取业务模块标签Methods inherited from class APMEventListener
onApplicationEventMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.context.ApplicationListener
supportsAsyncExecution
-
Constructor Details
-
AbstractAuditLogAPMEventListener
public AbstractAuditLogAPMEventListener()
-
-
Method Details
-
init
@PostConstruct public void init()初始化服务器IP地址在Bean初始化时执行,获取本机IP地址
注意:获取失败会抛出异常,因为IP字段是审计日志的重要标识
-
createTable
-
saveLog
-
tagName
-
operationName
-
ignore
-
handleAPMLog
Description copied from class:APMEventListener处理APM日志(带Class和Method信息)默认实现会调用handleAPMLog(APMLog log)方法
- Overrides:
handleAPMLogin classAPMEventListener- Parameters:
log- APM日志clazz- 被监控的类method- 被监控的方法
-
beforeSave
审计日志入库前处理钩子(H15)重要提示:审计日志包含原始请求参数(args)、请求头(headers)、返回值(returnObj), 其中可能含有密码、Token、Cookie、身份证号、手机号、银行卡等敏感信息,默认会原样落库。
默认配置下的安全基线:审计监听器默认不注册 (
nif.apm.listener.audit.enabled默认false),须显式开启后才会采集落库; 因此生产环境默认无敏感数据入库风险。一旦显式开启审计,请务必覆写本方法 对敏感字段做脱敏、裁剪或过滤后再落库(审计表通常权限较低且按月长期留存)。示例:
@Override protected AuditLog beforeSave(AuditLog auditLog) { // 例如:清空敏感字段,或对值做掩码处理 auditLog.setArgs(null); auditLog.setHeaders(null); return auditLog; }- Parameters:
auditLog- 构建完成的审计日志(尚未落库)- Returns:
- 处理后的审计日志(默认原样返回)
-
isSpringMvcBuiltInObject
-
toString
-
toString
-
handleAPMLog
Description copied from class:APMEventListener处理APM日志(抽象方法,子类必须实现)子类需要实现此方法来自定义日志处理逻辑
- Specified by:
handleAPMLogin classAPMEventListener- Parameters:
log-- See Also:
-