1. 添加依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</dependency>
<!-- 面向切面框架(aspectj) -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
2. 创建处理文件 aspect
package com.it.demo.aspect;
import javax.servlet.http.HttpServletRequest;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
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;
@Aspect
@Component
/**
* 记录请求的日志
**/
public class HttpAspect {
//spring 中的日志框架(底层实现是 loggerFactory)
private static final Logger logger = LoggerFactory.getLogger(HttpAspect.class);
/**
*需要切入的点(pointcut)
*execution(public * com.it.demo.Controller.GirlController.*(..)) 表示执行 任意
* 返回值,com.it.demo.Controller.GirlController中所有方法(任意参数)
**/
@Pointcut("execution(public * com.it.demo.Controller.GirlController.*(..))")
public void log() {}
@Before("log()")
public void beforeLog(JoinPoint joinPoint) {
//获得请求中的属性
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
//获得请求
HttpServletRequest request = servletRequestAttributes.getRequest();
// 记录请求
//1.url
logger.info("url={}", request.getRequestURL());
//2.请求方式
logger.info("metho={}", request.getMethod());
//3.客户端的IP
logger.info("client_IP={}", request.getRemoteAddr());
//4.请求执行的controller中的那个方法
/**
* joinPoint.getSignature().getDeclaringTypeName() --- 获得类名
* joinPoint.getSignature().getName() ---- 获得方法名
*/
logger.info("class_method={}", joinPoint.getSignature().getDeclaringTypeName() +"."+ joinPoint.getSignature().getName());
//5.请求参数......
logger.info("args={}", joinPoint.getArgs());
logger.info("请求进入controller");
}
@After("log()")
public void afterLog() {
logger.info("执行方法后响应");
}
//获得放回的结果
@AfterReturning(returning = "object", pointcut = "log()")
public void afterReturningLog(Object object) {
logger.info("response={}", object);
System.out.println("返回结果之后");
}
}
3. 执行(获得列表的方法)结果