一、需要的依赖包
1.aop
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2.log4j
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
二、切面类
package com.example.demo011.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 WebAsept {
private static final Logger logger = LoggerFactory.getLogger(WebAsept.class);
@Pointcut("execution(public * com.example.demo011.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());
// request.getParameterNames()方法是将发送请求页面中form表单里
// 所有具有name属性的表单对象获取(包括button).返回一个Enumeration类型的枚举.
Enumeration<String> emu = request.getParameterNames();
while (emu.hasMoreElements()){
String name = (String) emu.nextElement();
logger.info("name:{},value:{}",name,request.getParameter(name));
}
}
@AfterReturning(returning = "ret",pointcut = "weblog()")//在方法后面返回ret
public void doAfterReturning(Object ret) throws Throwable{
logger.info("RESPONSE:" + ret);
}
}