spring boot项目配置AOP日志切面

超、凢脫俗 2021-09-27 08:50 374阅读 0赞

有时候spring boot项目想要监听controller类的请求记录,可以通过aop方式处理。

引入maven依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-aop</artifactId>
  4. </dependency>

配置AOP切面配置类

  1. import org.aspectj.lang.JoinPoint;
  2. import org.aspectj.lang.annotation.Aspect;
  3. import org.aspectj.lang.annotation.Before;
  4. import org.aspectj.lang.annotation.Pointcut;
  5. import org.slf4j.Logger;
  6. import org.slf4j.LoggerFactory;
  7. import org.springframework.stereotype.Component;
  8. import org.springframework.web.context.request.RequestContextHolder;
  9. import org.springframework.web.context.request.ServletRequestAttributes;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpSession;
  12. import java.util.Arrays;
  13. /** * 日志切面 */
  14. @Aspect
  15. @Component
  16. public class LogAspect {
  17. private final static Logger logger = LoggerFactory.getLogger(LogAspect.class);
  18. @Pointcut("execution(public * cn.test.controller.*.*(..))")
  19. public void webLog() {
  20. }
  21. @Before("webLog()")
  22. public void deBefore(JoinPoint joinPoint) throws Throwable {
  23. // 接收到请求,记录请求内容
  24. ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
  25. HttpServletRequest request = attributes.getRequest();
  26. HttpSession session = request.getSession();
  27. String username = (String) session.getAttribute("username");
  28. // 记录下请求内容
  29. logger.info("USERNAME : " + username);
  30. logger.info("IP : " + request.getRemoteAddr());
  31. logger.info("URL : " + request.getRequestURL().toString() + " HTTP_METHOD : " + request.getMethod());
  32. logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
  33. logger.info("INPUT ARGS : " + Arrays.toString(joinPoint.getArgs()));
  34. }
  35. /*@AfterReturning(returning = "ret", pointcut = "webLog()") public void doAfterReturning(Object ret) throws Throwable { // 处理完请求,返回内容 logger.info("方法的返回值 : " + ret); } //后置异常通知 @AfterThrowing("webLog()") public void throwss(JoinPoint jp) { logger.info("方法异常时执行....."); } //后置最终通知,final增强,不管是抛出异常或者正常退出都会执行 @After("webLog()") public void after(JoinPoint jp) { logger.info("方法最后执行....."); } //环绕通知,环绕增强,相当于MethodInterceptor @Around("webLog()") public Object arround(ProceedingJoinPoint pjp) { logger.info("方法环绕start....."); try { Object o = pjp.proceed(); logger.info("方法环绕proceed,结果是 :" + o); return o; } catch (Throwable e) { e.printStackTrace(); return null; } }*/
  36. }

发表评论

表情:
评论列表 (有 0 条评论,374人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Aop 日志切面

    这几点非常重要: > 只有 Spring 生成的对象才有 AOP 功能,因为 Spring 生成的代理对象才有 AOP 功能。 切入的类和被切入的类必须是被spring管理