SpringBoot使用AOP获取请求参数

Posted timeflying

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot使用AOP获取请求参数相关的知识,希望对你有一定的参考价值。

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
     * @Author: yangli
     * @Date: 2019/9/06-10:17
     **/
    @Pointcut("execution(* com.*.controller.*Controller.*(..))")
    public void methodArgs() 

    

    @Around("methodArgs()")
    public Object invoke(ProceedingJoinPoint joinPoint) throws Throwable 
        Object result = null;

        // 获取请求参数进行打印
        Signature signature = joinPoint.getSignature();
        JSONObject signatureJson = JSON.parseObject(JSON.toJSONString(signature));
        // 方法名
        String methodName = signatureJson.getString("name");
        // 类名
        String serviceName = signatureJson.getString("declaringType");

        // 参数名数组
        JSONArray parameterNames = signatureJson.getJSONArray("parameterNames");
        // 构造参数组集合
        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.error(" -> 方法() -> 参数: - ", serviceName, methodName, JSON.toJSON(parameterNames), JSON.toJSON(argList));
         catch (Exception e) 
            log.error("参数获取失败: ", e.getMessage());
        

        result = joinPoint.proceed();

        return result;
    

 

以上是关于SpringBoot使用AOP获取请求参数的主要内容,如果未能解决你的问题,请参考以下文章

springBoot使用aop添加处理rest请求 打印请求时间 和请求参数

springboot获取请求参数的几种方式可选参数使用

springboot中如何在切面中重写请求参数

springboot+aop切点记录请求和响应信息

aop@before,@afterReturning记录请求参数,返回参数,以及异常情形

5-9 SpringBoot AOP的使用