ref @SysLog 请求参数无法序列化异常优化

This commit is contained in:
lbw committed 2023-12-03 23:44:10 +08:00
1 parent 7feb86c0b6
commit af48c60f18
2 files changed
+30 -6

No files matched your search

@@ -16,7 +16,11 @@
package com.pig4cloud.pigx.common.log.event;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.TypeUtil;
import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.FilterProvider;
@@ -34,7 +38,12 @@ import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.event.EventListener;
import org.springframework.core.annotation.Order;
import org.springframework.scheduling.annotation.Async;
import org.springframework.validation.BindingResult;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
/**
@@ -44,7 +53,14 @@ import java.util.Objects;
@RequiredArgsConstructor
public class SysLogListener implements InitializingBean {
// new 一个 避免日志脱敏策略影响全局ObjectMapper
/**
* 忽略序列化的对象类型
*/
private final static Class[] ignoreClass = { ServletRequest.class, BindingResult.class };
/**
* new 一个 避免日志脱敏策略影响全局ObjectMapper
*/
private final static ObjectMapper objectMapper = new ObjectMapper();
private final RemoteLogService remoteLogService;
@@ -60,8 +76,19 @@ public class SysLogListener implements InitializingBean {
// json 格式刷参数放在异步中处理,提升性能
if (Objects.nonNull(source.getBody()) && logProperties.isRequestEnabled()) {
String params = objectMapper.writeValueAsString(source.getBody());
source.setParams(StrUtil.subPre(params, logProperties.getMaxLength()));
Object[] args = (Object[]) source.getBody();
List<Object> list = CollUtil.toList(args);
// 删除部分无法序列化的参数
list.removeIf(obj -> Arrays.stream(ignoreClass).anyMatch(clazz -> clazz.isAssignableFrom(obj.getClass())));
try {
// 序列化参数
String params = objectMapper.writeValueAsString(list);
source.setParams(StrUtil.subPre(params, logProperties.getMaxLength()));
}
catch (Exception e) {
log.error("请求参数序列化异常:{}", e.getMessage());
}
}
source.setBody(null);
@@ -146,7 +146,6 @@ public class PayNotifyRecordController {
@Inner(false)
@SneakyThrows
@XssCleanIgnore
@SysLog("支付宝渠道异步回调")
@PostMapping("/ali/callbak")
@Operation(summary = "支付宝渠道异步回调", description = "支付宝渠道异步回调")
public void aliCallbak(HttpServletRequest request, HttpServletResponse response) {
@@ -165,7 +164,6 @@ public class PayNotifyRecordController {
@XssCleanIgnore
@PostMapping("/wx/callbak")
@Operation(summary = "微信渠道支付回调", description = "微信渠道支付回调")
@SysLog("微信渠道支付回调")
public String wxCallbak(HttpServletRequest request) {
String xmlMsg = HttpKit.readData(request);
log.info("微信订单回调信息:{}", xmlMsg);
@@ -183,7 +181,6 @@ public class PayNotifyRecordController {
@XssCleanIgnore
@PostMapping("/merge/callbak")
@Operation(summary = "聚合渠道异步回调", description = "聚合渠道异步回调")
@SysLog("聚合渠道异步回调")
public void mergeCallbak(HttpServletRequest request, HttpServletResponse response) {
// 解析回调信息
Map<String, String> params = AliPayApi.toMap(request);