码迷,mamicode.com
首页 > 编程语言 > 详细

SpringBoot使用AOP获取请求参数

时间:2019-09-15 16:51:19      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:lis   mes   result   null   fas   roc   col   void   pre   

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获取请求参数

标签:lis   mes   result   null   fas   roc   col   void   pre   

原文地址:https://www.cnblogs.com/timeflying/p/11523314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!