请问fastjson2里面PropertyPreFilters在哪?

来源:5-9 SpringBoot AOP的使用

RikaShiro

2023-03-08

如题。springAOP中 复制了LogAspect.java源码。
但是import com.alibaba.fastjson2.support.spring.PropertyPreFilters;报错
不想使用老版fastjson
图片描述

写回答

1回答

RikaShiro

提问者

2023-03-08

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.filter.SimplePropertyPreFilter;

import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.http.HttpServletRequest;
@Before("controllerPointcut()")
  public void doBefore(JoinPoint joinPoint) throws Throwable {

    // 开始打印请求日志
    ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    HttpServletRequest request = attributes.getRequest();
    Signature signature = joinPoint.getSignature();
    String name = signature.getName();

    // 打印请求信息
    LOG.info("------------- 开始 -------------");
    LOG.info("请求地址: {} {}", request.getRequestURL().toString(), request.getMethod());
    LOG.info("类名方法: {}.{}", signature.getDeclaringTypeName(), name);
    LOG.info("远程地址: {}", request.getRemoteAddr());

    // 打印请求参数
    Object[] args = joinPoint.getArgs();
    // LOG.info("请求参数: {}", JSONObject.toJSONString(args));

    Object[] arguments = new Object[args.length];
    for (int i = 0; i < args.length; i++) {
      if (args[i] instanceof ServletRequest
          || args[i] instanceof ServletResponse
          || args[i] instanceof MultipartFile) {
        continue;
      }
      arguments[i] = args[i];
    }
    // 排除字段,敏感字段或太长的字段不显示
    String[] excludeProperties = { "password", "file" };
    SimplePropertyPreFilter filter = new SimplePropertyPreFilter();
    for (String str : excludeProperties) {
      filter.getExcludes().add(str);
    }
    LOG.info("请求参数: {}", JSON.toJSONString(arguments, filter));
  }

  @Around("controllerPointcut()")
  public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
    long startTime = System.currentTimeMillis();
    Object result = proceedingJoinPoint.proceed();
    // 排除字段,敏感字段或太长的字段不显示
    String[] excludeProperties = { "password", "file" };
    SimplePropertyPreFilter filter = new SimplePropertyPreFilter();
    for (String str : excludeProperties) {
      filter.getExcludes().add(str);
    }
    LOG.info("返回结果: {}", JSON.toJSONString(result, filter));
    LOG.info("------------- 结束 耗时:{} ms -------------", System.currentTimeMillis() - startTime);
    return result;
  }

已解决。换成SimplePropertyPreFilter

0
0

Spring Boot+Vue3前后端分离,实战wiki知识库系统

一课掌握前后端最火框架,更有职场竞争力

2525 学习 · 1672 问题

查看课程