zoukankan      html  css  js  c++  java
  • SpringBoot使用Aspect切面拦截打印请求参数

    引入依赖

       <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency>

    也用到了fastjson打印参数 , 如果引了就不需要(也可以根据自己的来打印)

      <!-- 添加fastjson 支持 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.15</version>
            </dependency>
    LogAspect.java

    import com.alibaba.fastjson.JSON;
    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.reflect.MethodSignature;
    import org.springframework.stereotype.Component;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import java.lang.reflect.Method;
    
    /***/
    @Slf4j
    @Component
    @Aspect  //表示它是一个切面
    public class LogAspect {
    
        /**
         *
         *  execution:改成自己要打印的控制器路径
         * @param proceedingJoinPoint
         * @return
         * @throws Throwable
         */
        @Around("execution(* com.example.*.controller.*.*(..)) ")
        public Object handleControllerMethod(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
    
            //原始的HTTP请求和响应的信息
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = attributes.getRequest();
    
            Signature signature = proceedingJoinPoint.getSignature();
            MethodSignature methodSignature = (MethodSignature)signature;
            //获取当前执行的方法
            Method targetMethod = methodSignature.getMethod();
    
            //获取参数
            Object[] objects = proceedingJoinPoint.getArgs();
            //获取参数
            Object[] arguments  = new Object[objects.length];
            for (int i = 0; i < objects.length; i++) {
                if (objects[i] instanceof ServletRequest || objects[i] instanceof ServletResponse || objects[i] instanceof MultipartFile) {
                  //过滤掉不能序列化的参数
                    continue;
                }
                arguments[i] = objects[i];
            }
    
    
            //获取返回对象
            Object object = proceedingJoinPoint.proceed();
    
            StringBuilder sb = new StringBuilder(1000);
            sb.append("-------------------------------------------------------------
    ");
            sb.append("Controller: ").append(targetMethod.getDeclaringClass().getName()).append("
    ");
            sb.append("Method    : ").append(targetMethod.getName()).append("
    ");
            sb.append("Params    : ").append(JSON.toJSONString(arguments)).append("
    ");
            sb.append("URI       : ").append(request.getRequestURI()).append("
    ");
            sb.append("URL       : ").append(request.getRequestURL()).append("
    ");
            sb.append("Return    : ").append(object).append("
    ");
            sb.append("-------------------------------------------------------------
    ");
            System.out.println(sb);
    
            return object;
        }
    }
    -----------------------有任何问题可以在评论区评论,也可以私信我,我看到的话会进行回复,欢迎大家指教------------------------ (蓝奏云官网有些地址失效了,需要把请求地址lanzous改成lanzoux才可以)
  • 相关阅读:
    (转载)如何通过Nicholas C. Zakas的面试
    (转载)Nicholas C. Zakas谈怎样才能成为优秀的前端工程师
    JavaScript程序开发(十三)—RegExp类型
    (转载)Nicholas C. Zakas如何面试前端工程师
    通用JS12——》变量、作用域与内存
    vuecli4 配置多页应用入坑详解
    事件委托
    nodejs中传入变量和格式说明符号来格式化用语
    原生js实现轮播图
    同步任务和异步任务
  • 原文地址:https://www.cnblogs.com/pxblog/p/15011186.html
Copyright © 2011-2022 走看看