Spring Boot 使用AOP统一处理Web请求日志
2018-01-29 14:12
691 查看
使用AOP统一处理Web请求日志
我们利用上一篇博文的:Spring Boot集成日志里面的例子来继续AOP统一处理WEB请求日志。POM文件新增依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
定义一个切面
package com.cc.springboot.aop; import java.util.Arrays; import java.util.Enumeration; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.aspectj.lang.JoinPoint; 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 WebLogAspect { private Logger logger = LoggerFactory.getLogger(getClass()); // 匹配com.cc.springboot.controller包下所有类的、 // 所有方法的执行作为切入点 @Pointcut("execution(public * com.cc.springboot.controller..*.*(..))") public void webLog() { } @Before("webLog()") public void doBefore(JoinPoint joinPoint) throws Throwable { // 接收到请求,记录请求内容 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); // 记录下请求内容 logger.info("URL : " + request.getRequestURL().toString()); logger.info("HTTP_METHOD : " + request.getMethod()); logger.info("IP : " + request.getRemoteAddr()); Enumeration<String> enu = request.getParameterNames(); while (enu.hasMoreElements()) { String name = (String) enu.nextElement(); logger.info("name:{},value:{}", name, request.getParameter(name)); } } @AfterReturning(returning = "ret", pointcut = "webLog()") public void doAfterReturning(Object ret) throws Throwable { // 处理完请求,返回内容 logger.info("RESPONSE : " + ret); } }
1.这里的可以把这里public void webLog() {}方法理解成具体pointcut(切入点)的声明,实际对应的切入点是“execution(public * com.cc.springboot.controller...(..))”;
2.@AfterReturning,是在具体业务方法返回后的操作(比如下面IndexController类中的getUserName()方法),所以returning=”ret”对应的是业务方法 的返回值,不是切入点声明的返回值,也就是returning=”ret”的“ret”就是具体的方法(public * com.cc.springboot.controller...(..))的返回值,对应public void afterReturning(ret returnValue) 的方法参数,名称一定要对应,在方法返回后,可以进行一些操作,比如输出返回值或者根据返回值进行一些操作。
修改IndexController
加入如下代码:修改APP类
测试
相关文章推荐
- Spring Boot中使用AOP统一处理web层异常的方法
- 详解Spring Boot中使用AOP统一处理Web请求日志
- spring-boot使用AOP统一处理日志
- Spring Boot入门(6)-使用AOP统一处理Web请求日志
- Spring Boot中使用AOP统一处理Web请求日志
- Spring Boot教程(六)使用AOP统一处理Web请求日志
- Spring Boot中使用AOP统一处理Web请求日志
- springboot【19】日志管理之使用AOP统一处理Web请求日志
- Spring Boot中使用AOP统一处理Web请求日志
- Spring Boot(十一)使用AOP,@Aspect统一处理Web请求日志
- 46. Spring Boot中使用AOP统一处理Web请求日志【从零开始学Spring Boot】
- 46. Spring Boot中使用AOP统一处理Web请求日志【从零开始学Spring Boot】
- SpringBoot基础教程2-1-6 日志规范-使用AOP统一处理Web日志
- Spring Boot中使用AOP统一处理Web请求日志
- (十四)SpringBoot使用AOP统一处理Web请求日志添加MDC
- spring boot 基础之使用AOP统一处理请求日志使用方法
- Spring Boot中使用AOP统一处理Web请求日志
- Spring Boot中使用AOP统一处理Web请求日志
- Spring Boot中使用AOP统一处理Web请求日志
- (转)Spring Boot中使用AOP统一处理Web请求日志