1、在pom.xml中引用spring-boot-starter-aop依赖
2、创建HttpAspect.java类,加上@Aspect注解
@Poincut注解表示切入的点,即程序中通用的逻辑业务,这里是请求的路径
@Before注解表示当前方法是在具体的请求方法之前执行
@After注解表示当前方法是在具体的请求方法之后 执行
@AfterReturning注解可以得到请求的参数
package com.example.aspect;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.JoinPoint;
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;
/**
* 利用AOP技术对往数据库中插入学生信息作权限验证
*/
@Aspect
@Component
public class HttpAspect {
private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
//@Before的注解在方法执行之前执行
//拦截该路径下studentList()方法,两个点表示任何参数
// @Before("execution(public * com.example.controller.StudentController.studentList(..))")
// public void log(){
// System.out.println("Test before");
// }
//
// @After("execution(public * com.example.controller.StudentController.studentList(..))")
// public void doAfter(){
// System.out.println("Test after");
// }
//定义一个公用方法
@Pointcut("execution(public * com.example.controller.StudentController.*(..))")
public void log(){
}
@Before("log()")
public void doBefore(JoinPoint joinPoint){
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
//url
logger.info("url={}", request.getRequestURI());
//method
logger.info("method={}", request.getMethod());
//ip
logger.info("ip={}", request.getRemoteAddr());
//method
logger.info("class_method={}", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
//param
logger.info("args={}", joinPoint.getArgs());
}
@After("log()")
public void doAfter(){
}
@AfterReturning(returning="obj", pointcut = "log()")
public void doAfterReturnig(Object obj){
logger.info("reponse={}", obj);
}
}