一,添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
二,在src/main/java下的某个包中新建类
package com.example.aop;
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;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
@Aspect
@Component
public class WebLogAspect {
private Logger logger = LoggerFactory.getLogger(getClass());
@Pointcut("execution(public * com.example.aop.controller..*.*(..))")
public void weblog(){
}
@Before("weblog()")
public void doBefore(JoinPoint joinPoint){
// 接收到请求,记录请求内容
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
// 记录下请求内容
logger.info("url : " + request.getRequestURL().toString());
logger.info("method : " + request.getMethod());
logger.info("ip : " + request.getRemoteAddr());
Enumeration<String> enu = request.getParameterNames();
while (enu.hasMoreElements()) {
String name = (String) enu.nextElement();
logger.info("key:{},value:{}", name, request.getParameter(name));
}
}
@AfterReturning(returning = "response", pointcut = "weblog()")
public void doAfterReturning(Object response) throws Throwable {
// 处理完请求,返回内容
logger.info("response : " + response);
}
}
测试
在controller中随便做的测试:
@RestController
public class HelloController {
@RequestMapping("/aop")
public String aop(String name){
return "aop log "+name;
}
}
2018-08-27 22:25:52.005 INFO 2928 --- [nio-8080-exec-1] com.example.aop.WebLogAspect : url : http://localhost:8080/aop
2018-08-27 22:25:52.005 INFO 2928 --- [nio-8080-exec-1] com.example.aop.WebLogAspect : method : GET
2018-08-27 22:25:52.005 INFO 2928 --- [nio-8080-exec-1] com.example.aop.WebLogAspect : ip : 0:0:0:0:0:0:0:1
2018-08-27 22:25:52.005 INFO 2928 --- [nio-8080-exec-1] com.example.aop.WebLogAspect : key:name,value:测试
2018-08-27 22:25:52.008 INFO 2928 --- [nio-8080-exec-1] com.example.aop.WebLogAspect : response : aop log 测试