<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.7</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<scope>test</scope>
</dependency>
@Aspect
@Component
public class WebLogAspect {
//这里@Pointcut设置切点可以设置为Controller层的地址
@Pointcut("execution( * com.example.demo.controller.*.*(..))")
public void webLog() {
}
//@Before指在切点方法之前执行,也就是在Controller层方法执行之前执行,这里可以通过JoinPoint获取一些有关方法的信息,在这里也可以修改参数的值
//@Before()括号里设置的是切点方法的名称
@Before("webLog()")
public void doBefore(JoinPoint joinPoint) throws Throwable {
// 接收到请求,记录请求内容
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
String ipAddr = getIpAddr(request);
System.out.println(ipAddr);
// 操作日志对象
String requestBody = JSONUtil.toJsonStr(joinPoint.getArgs());
System.out.println("objectObjectMap"+requestBody);
System.out.println(request.getRequestURI());
MethodSignature methodSignature= (MethodSignature) joinPoint.getSignature();
// //获得方法的注解
Method method = methodSignature.getMethod();
method.getName();
System.out.println(method.getName());
String params= JSONObject.toJSONString(request.getParameterMap());
System.out.println(params);
//自己实现获取用户id
// Enumeration<String> auth = request.getHeaders(JwtTokenUtils.TOKEN_HEADER);
// String token = auth.nextElement().replace(JwtTokenUtils.TOKEN_PREFIX, STRING_BLANK);
// return JwtTokenUtils.getUserId(token);
}