feat(日志管理): 增加 Jackson json 日志脱敏工具类,如果日志入库中有敏感字段则进行删除

This commit is contained in:
冷冷 committed 2024-08-18 23:43:44 +08:00
1 parent 686c0c770f
commit f6e5aebfac
1 file changed
+6 -23
@@ -18,16 +18,11 @@ package com.pig4cloud.pigx.common.log.event;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
import com.pig4cloud.pigx.admin.api.dto.SysLogDTO;
import com.pig4cloud.pigx.admin.api.feign.RemoteLogService;
import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
import com.pig4cloud.pigx.common.core.jackson.PigxJavaTimeModule;
import com.pig4cloud.pigx.common.log.config.PigxLogProperties;
import com.pig4cloud.pigx.common.log.util.JacksonSensitiveFieldUtil;
import jakarta.servlet.ServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
@@ -52,12 +47,11 @@ public class SysLogListener implements InitializingBean {
/**
* 忽略序列化的对象类型
*/
private final static Class[] ignoreClass = { ServletRequest.class, BindingResult.class };
private final static Class[] ignoreClass = {ServletRequest.class, BindingResult.class};
/**
* new 一个 避免日志脱敏策略影响全局ObjectMapper
*/
private final static ObjectMapper objectMapper = new ObjectMapper();
private final RemoteLogService remoteLogService;
@@ -79,10 +73,9 @@ public class SysLogListener implements InitializingBean {
try {
// 序列化参数
String params = objectMapper.writeValueAsString(list);
String params = JacksonSensitiveFieldUtil.getObjectMapper().writeValueAsString(list);
source.setParams(StrUtil.subPre(params, logProperties.getMaxLength()));
}
catch (Exception e) {
} catch (Exception e) {
log.error("请求参数序列化异常:{}", e.getMessage());
}
}
@@ -93,18 +86,8 @@ public class SysLogListener implements InitializingBean {
@Override
public void afterPropertiesSet() {
objectMapper.addMixIn(Object.class, PropertyFilterMixIn.class);
String[] ignorableFieldNames = logProperties.getExcludeFields().toArray(new String[0]);
FilterProvider filters = new SimpleFilterProvider().addFilter("filter properties by name",
SimpleBeanPropertyFilter.serializeAllExcept(ignorableFieldNames));
objectMapper.setFilterProvider(filters);
objectMapper.registerModule(new PigxJavaTimeModule());
JacksonSensitiveFieldUtil.configureSensitiveFields(ignorableFieldNames);
JacksonSensitiveFieldUtil.registerCustomModule(new PigxJavaTimeModule());
}
@JsonFilter("filter properties by name")
class PropertyFilterMixIn {
}
}