009 AOP统一处理WEB请求日志

AOP的依赖POM地址:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

可能会用到的注解:

  1. @Aspect:作用是把当前类标识为一个切面供容器读取
  2. @Pointcut:Pointcut是植入Advice的触发条件。每个Pointcut的定义包括2部分,一是表达式,二是方法签名。方法签名必须是 public及void型。可以将Pointcut中的方法看作是一个被Advice引用的助记符,因为表达式不直观,因此我们可以通过方法签名的方式为 此表达式命名。因此Pointcut中的方法只需要方法签名,而不需要在方法体内编写实际代码。
  3. @Around:环绕增强,相当于MethodInterceptor
  4. @AfterReturning:后置增强,相当于AfterReturningAdvice,方法正常退出时执行
  5. @Before:标识一个前置增强方法,相当于BeforeAdvice的功能,相似功能的还有
  6. @AfterThrowing:异常抛出增强,相当于ThrowsAdvice
  7. @After: final增强,不管是抛出异常或者正常退出都会执行

案例代码,也可以去案例文件里看:

/**
 * 用AOP记录WEB请求日志
 */
@Aspect
@Component
public class WebLogAspect {
    private static final Logger log = Logger.getLogger(WebLogAspect.class);

    /**
     * 定义切点,切入指定包下的全部类的全部方法
     */
    @Pointcut("execution(* com.blacktv.springboot.Controller.*.*(*))")
    public void webLog() {

    }

    /**
     * 前置增强拦截请求参数信息
     */
    @Before("webLog()")
    public void webLogBefore(JoinPoint joinPoint) {
        ServletRequestAttributes app = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = app.getRequest();
        //记录URL、IP、访问方法
        log.info("URL:" + request.getRequestURI());
        log.info("IP:" + request.getRemoteAddr());
        log.info("HTTP_METHOD:" + request.getMethod());
        //记录请求参数
        Enumeration<String> enumeration = request.getParameterNames();
        while (enumeration.hasMoreElements()) {
            String key = (String) enumeration.nextElement();
            log.info("key:" + key + " ,value:" + request.getParameter(key));
        }
    }

    /**
     * 后置增强,记录返回内容
     *
     * @param result
     */
    @AfterReturning(returning = "result", pointcut = "webLog()")
    public void webLohA(Object result) {
        log.info("result:" + result);
    }
}

测试一下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值