SpringBoot使用AOP获取请求参数
2024-08-30 04:31:21
最近试了下拦截controller方法查看请求参数,方式如下:
package com.*.aop; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List; /**
* @Description //请求参数aop
**/
@Component
@Aspect
@Slf4j
public class RequestParameterAop { /**
* @Description: 定义需要拦截的切面
* @Return: void
**/
@Pointcut("execution(* com.*.controller.*Controller.*(..))")
public void methodArgs() { } @Around("methodArgs()")
public Object invoke(ProceedingJoinPoint joinPoint) throws Throwable {
Object result = null; Signature signature = joinPoint.getSignature();
// 方法名
String methodName = signature.getName();
// 类名
String serviceName = signature.getDeclaringTypeName(); // 参数名数组
String[] parameterNames = ((MethodSignature) signature).getParameterNames();
// 构造参数组集合
List<Object> argList = new ArrayList<>();
for (Object arg : joinPoint.getArgs()) {
// request/response无法使用toJSON
if (arg instanceof HttpServletRequest) {
argList.add("request");
} else if (arg instanceof HttpServletResponse) {
argList.add("response");
} else {
argList.add(JSON.toJSON(arg));
}
}
try {
log.info("{} -> 方法({}) -> 参数:{} - {}", serviceName, methodName, JSON.toJSON(parameterNames), JSON.toJSON(argList));
} catch (Exception e) {
log.error("参数获取失败: {}", e.getMessage());
}
result = joinPoint.proceed(); return result;
}
}
最新文章
- PostgresSQL的安装与基本命令使用
- 【模块化编程】理解requireJS-实现一个简单的模块加载器
- ORA-00600: internal error code, arguments: [kcratr1_lastbwr], [], [], [], [], [], [], []
- CSS Sprites+CSS3 Icon Font
- HTML 的 meta 标签
- JS 控制CSS样式表
- java 内存观察
- 禅道 Rest API 开发
- PHP 依赖注入,从此不再考虑加载顺序
- C# 将文件转化成byte[]数组
- java 接收 char字符型
- Android Dependencies小差号引起的问题
- MySql学习笔记(转载)
- control
- python 密码学编程
- python安装media报错
- Xlua 不同平台链接库编译
- mysql中find_in_set结合GROUP_CONCAT使用
- Scala入门1(单例对象和伴生类)
- Sizzle源码分析:二 词法分析