1配置类,最基本的就是要加上注解@Aspect
2关于在哪里起作用,通过注解或方法名均可
@Around("@within(org.springframework.stereotype.Controller) || @annotation(org.springframework.stereotype.Controller)")
public Object apiLog(ProceedingJoinPoint joinPoint) throws Throwable {}
3
ProceedingJoinPoint为连接点,获取目标对象的方法名就通过它
4 很多我们想要获取的内容都是通过request获取的
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
5 关于ip地址的获取,很多是通过各种代理转发的,所以网上有很多代码贴出了如何获取实际请求的ip地址的方法
6 关于请求内容的获取,要首先从请求MediaType去考虑,如果是get请求,则请求参数直接为request.getQueryString()
如果是post请求,则需要获取请求的内容,此时就需要从
joinPoint.getArgs();来获取,此处返回的为一个Object的数组对象,具体类型,为方法名参数中的内容,按顺序一次为 数组索引0,1...
具体是哪一种类型,需要去判断,可选的类型为
HttpServletResponse ,
HttpServletRequest,
MultipartFile
如果不是以上则可以是bean对象,此时就可以通过解析json来获取
7 特别要注意的一点就是,请求内容中可能含有敏感词,如密码,此时就不适宜在log中显示打印,可以单独获取并替换为***