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才可以)
  • 相关阅读:
    java java.lang.NoClassDefFoundError 的解决办法
    jdbc.properties 包含多种数据库驱动链接的版本
    regex正则表达式
    针对谷歌默认最小字体12px的正确解决方案 (css、html)
    有关svn的报错
    芝麻圆表
    微信 公众号开发文档接口都是后台去请求。
    一级和二级的列表在一起的时候。获取一级放在轮播里面展示。10个一组轮播
    移动端的搜索用的是from提交
    h5中不能用js来直接获取网络码和机器码的。
  • 原文地址:https://www.cnblogs.com/pxblog/p/15011186.html
Copyright © 2011-2022 走看看