content: package com.jerry.poetry.aspect;
  
  import org.aspectj.lang.JoinPoint;
  import org.aspectj.lang.annotation.*;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.springframework.stereotype.Component;
  import org.springframework.web.context.request.RequestContextHolder;
  import org.springframework.web.context.request.ServletRequestAttributes;
  
  import javax.servlet.http.HttpServletRequest;
  
  @Aspect
  @Component
  public class HttpAspect {
  
      private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
  
      //公用注解  切面
      @Pointcut("execution(public * com.jerry.poetry.controller.PoetryController.*(..)) || execution(public * com.jerry.poetry.controller.AuthorController.*(..))")
      public void log(){
  
      }
  
      //方法执行前的拦截   比如验证参数、是否登陆等
      @Before("log()")
      public void doBefore(JoinPoint joinPoint){
          //url
          ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
          HttpServletRequest request = attributes.getRequest();
          logger.info("url={}",request.getRequestURL());
          //method
          logger.info("method={}",request.getMethod());
          //类方法
          logger.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName());
          //参数
          logger.info("args={}",joinPoint.getArgs());
      }
  
      //方法执行后
      @After("log()")
      public void doAfter(){
          logger.info("请求结束");
      }
  
      @AfterReturning(returning = "object",pointcut = "log()")
      public void doAfterReturning(Object object){
          logger.info("response={}",object.toString());
      }
  }
  