日志脱敏

This commit is contained in:
lijiahang
2023-06-30 15:14:17 +08:00
parent c16874a17b
commit 0793463da6
4 changed files with 42 additions and 19 deletions

View File

@@ -28,7 +28,7 @@ public class OrionDesensitizeAutoConfiguration {
*/ */
@Bean @Bean
@ConditionalOnBean(FastJsonHttpMessageConverter.class) @ConditionalOnBean(FastJsonHttpMessageConverter.class)
public DesensitizeValueSerializeFilter desensitizeResultHandler(FastJsonHttpMessageConverter converter) { public DesensitizeValueSerializeFilter desensitizeValueSerializeFilter(FastJsonHttpMessageConverter converter) {
DesensitizeValueSerializeFilter desensitizeFilter = new DesensitizeValueSerializeFilter(); DesensitizeValueSerializeFilter desensitizeFilter = new DesensitizeValueSerializeFilter();
// 获取 json 配置 // 获取 json 配置
FastJsonConfig config = converter.getFastJsonConfig(); FastJsonConfig config = converter.getFastJsonConfig();

View File

@@ -28,7 +28,7 @@ public class OrionLogPrinterConfiguration {
* @param config config * @param config config
* @return 美化日志打印器 * @return 美化日志打印器
*/ */
@Bean @Bean(initMethod = "init")
@ConditionalOnProperty(value = "logging.printer.mode", havingValue = "pretty") @ConditionalOnProperty(value = "logging.printer.mode", havingValue = "pretty")
public LogPrinterInterceptor prettyPrinter(LogPrinterConfig config) { public LogPrinterInterceptor prettyPrinter(LogPrinterConfig config) {
return new PrettyLogPrinterInterceptor(config); return new PrettyLogPrinterInterceptor(config);
@@ -38,7 +38,7 @@ public class OrionLogPrinterConfiguration {
* @param config config * @param config config
* @return 单行日志打印器 * @return 单行日志打印器
*/ */
@Bean @Bean(initMethod = "init")
@ConditionalOnProperty(value = "logging.printer.mode", havingValue = "row") @ConditionalOnProperty(value = "logging.printer.mode", havingValue = "row")
public LogPrinterInterceptor rowPrinter(LogPrinterConfig config) { public LogPrinterInterceptor rowPrinter(LogPrinterConfig config) {
return new RowLogPrinterInterceptor(config); return new RowLogPrinterInterceptor(config);

View File

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.serializer.PropertyFilter;
import com.alibaba.fastjson.serializer.SerializeFilter; import com.alibaba.fastjson.serializer.SerializeFilter;
import com.alibaba.fastjson.serializer.ValueFilter; import com.alibaba.fastjson.serializer.ValueFilter;
import com.orion.lang.utils.Objects1; import com.orion.lang.utils.Objects1;
import com.orion.lang.utils.collect.Lists;
import com.orion.lang.utils.collect.Maps; import com.orion.lang.utils.collect.Maps;
import com.orion.lang.utils.reflect.Annotations; import com.orion.lang.utils.reflect.Annotations;
import com.orion.lang.utils.reflect.Classes; import com.orion.lang.utils.reflect.Classes;
@@ -16,12 +17,15 @@ import com.orion.ops.framework.common.utils.Desensitizes;
import com.orion.ops.framework.log.core.config.LogPrinterConfig; import com.orion.ops.framework.log.core.config.LogPrinterConfig;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import org.aopalliance.intercept.MethodInvocation; import org.aopalliance.intercept.MethodInvocation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import javax.servlet.ServletRequest; import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; import javax.servlet.ServletResponse;
import java.lang.annotation.Annotation; import java.lang.annotation.Annotation;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Predicate; import java.util.function.Predicate;
@@ -34,10 +38,6 @@ import java.util.function.Predicate;
*/ */
public abstract class BaseLogPrinterInterceptor implements LogPrinterInterceptor { public abstract class BaseLogPrinterInterceptor implements LogPrinterInterceptor {
private static final String EMPTY_ARG = "<EMPTY>";
private static final String ERROR_ARG = "<ERROR>";
/** /**
* 请求头过滤器 * 请求头过滤器
*/ */
@@ -46,7 +46,12 @@ public abstract class BaseLogPrinterInterceptor implements LogPrinterInterceptor
/** /**
* 字段过滤器 * 字段过滤器
*/ */
protected SerializeFilter[] fieldFilter; protected SerializeFilter[] fieldFilters;
/**
* 脱敏配置
*/
private final LogPrinterConfig config;
/** /**
* api 描述 * api 描述
@@ -58,20 +63,23 @@ public abstract class BaseLogPrinterInterceptor implements LogPrinterInterceptor
*/ */
private final Map<String, boolean[]> ignoreParameter; private final Map<String, boolean[]> ignoreParameter;
@SuppressWarnings("ALL")
@Autowired(required = false)
@Qualifier("desensitizeValueSerializeFilter")
private ValueFilter desensitizeValueSerializeFilter;
public BaseLogPrinterInterceptor(LogPrinterConfig config) { public BaseLogPrinterInterceptor(LogPrinterConfig config) {
this.config = config;
this.summaryMapping = Maps.newMap(); this.summaryMapping = Maps.newMap();
this.ignoreParameter = Maps.newMap(); this.ignoreParameter = Maps.newMap();
this.init(config);
} }
/** @Override
* 初始化 public void init() {
*
* @param config config
*/
protected void init(LogPrinterConfig config) {
// 请求头过滤器 // 请求头过滤器
this.headerFilter = header -> config.getHeaders().contains(header); this.headerFilter = header -> config.getHeaders().contains(header);
// 字段过滤器
List<SerializeFilter> fieldFilterList = Lists.newList();
// 忽略字段过滤器 // 忽略字段过滤器
PropertyFilter ignoreFilter = (Object object, String name, Object value) -> !config.getField().getIgnore().contains(name); PropertyFilter ignoreFilter = (Object object, String name, Object value) -> !config.getField().getIgnore().contains(name);
// 脱敏字段过滤器 // 脱敏字段过滤器
@@ -82,7 +90,13 @@ public abstract class BaseLogPrinterInterceptor implements LogPrinterInterceptor
return value; return value;
} }
}; };
this.fieldFilter = new SerializeFilter[]{ignoreFilter, desensitizeFilter}; fieldFilterList.add(ignoreFilter);
fieldFilterList.add(desensitizeFilter);
// 注解脱敏 未引入
if (desensitizeValueSerializeFilter != null) {
fieldFilterList.add(desensitizeValueSerializeFilter);
}
this.fieldFilters = fieldFilterList.toArray(new SerializeFilter[0]);
} }
@Override @Override
@@ -182,7 +196,7 @@ public abstract class BaseLogPrinterInterceptor implements LogPrinterInterceptor
return EMPTY_ARG; return EMPTY_ARG;
} else if (printCount == 1) { } else if (printCount == 1) {
// 单个打印参数 // 单个打印参数
return JSON.toJSONString(args[lastPrintIndex], fieldFilter); return JSON.toJSONString(args[lastPrintIndex], fieldFilters);
} else { } else {
// 多个打印参数 // 多个打印参数
JSONArray arr = new JSONArray(); JSONArray arr = new JSONArray();
@@ -191,7 +205,7 @@ public abstract class BaseLogPrinterInterceptor implements LogPrinterInterceptor
arr.add(args[i]); arr.add(args[i]);
} }
} }
return JSON.toJSONString(arr, fieldFilter); return JSON.toJSONString(arr, fieldFilters);
} }
} catch (Exception e) { } catch (Exception e) {
return ERROR_ARG; return ERROR_ARG;
@@ -206,7 +220,7 @@ public abstract class BaseLogPrinterInterceptor implements LogPrinterInterceptor
*/ */
protected String responseToString(Object o) { protected String responseToString(Object o) {
try { try {
return JSON.toJSONString(o, fieldFilter); return JSON.toJSONString(o, fieldFilters);
} catch (Exception e) { } catch (Exception e) {
return ERROR_ARG; return ERROR_ARG;
} }

View File

@@ -11,4 +11,13 @@ import org.aopalliance.intercept.MethodInterceptor;
*/ */
public interface LogPrinterInterceptor extends MethodInterceptor { public interface LogPrinterInterceptor extends MethodInterceptor {
String EMPTY_ARG = "<EMPTY>";
String ERROR_ARG = "<ERROR>";
/**
* 初始化
*/
void init();
} }