面向切面编程,使用AOP来处理请求
把某一过程的方法进行统一处理
比如需要验证登录后进行增删查改的操作,只需要添加AOP统一进行处理
1.添加AOP依赖
2.建立aspect包
@Aspect
@Component
public class HttpAspect {
private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
@Pointcut("execution(public * com.imooc.controller.GirlController.*(..))")
public void log() {
}
@Before("log()")
public void doBefore(JoinPoint joinPoint) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
//url
logger.info("url={}", request.getRequestURL());
//method
logger.info("method={}", request.getMethod());
//ip
logger.info("ip={}", request.getRemoteAddr());
//类方法
logger.info("class_method={}", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
//参数
logger.info("args={}", joinPoint.getArgs());
}
@After("log()")
public void doAfter() {
logger.info("222222222222");
}
@AfterReturning(returning = "object", pointcut = "log()")
public void doAfterReturning(Object object) {
logger.info("response={}", object.toString());
}
}
进行拦截,注意标签的是使用,括号里面表明时拦截兰哪个方法
@Before指的是在之前拦截
@After同理
@Pointcut指名要切的位置,写一个公共的方法然后正在后面具体的实现功能
输出尽量使用log来输出
doBefore方法中展示了获取传入参数的方法
deAfterReturning展示了如果写入返回的数据