代码只简单实现了请求和响应的日志打印
1、导入相应的jar包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.9</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
2、在spring-mvc.xml中加入配置
<aop:aspectj-autoproxy />
3、编写aop实现类
@Aspect
@Component
public class ControllerAop {
private static final Logger logger = LoggerFactory.getLogger(ControllerAop.class);
@Pointcut(value = "execution(* com.ssm.controller.*.*(..))")
public void log() {}
@Before(value = "log()")
public void doBefore(JoinPoint joinPoint) {
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
HttpServletRequest request = servletRequestAttributes.getRequest();
String method = request.getMethod();
String remoteAddr = request.getRemoteAddr();
String url = request.getRequestURL().toString();
Object[] args = joinPoint.getArgs();
if (args.length == 0) {
return;
}
Map<String, Object> params = new HashMap<>();
for (Object arg : args) {
if (arg instanceof BindingResult) {
continue;
}
if (arg instanceof HttpSession) {
continue;
}
if (arg instanceof MultipartFile) {
MultipartFile file = (MultipartFile) arg;
params.put("file", getFileParam(file));
} else if (arg instanceof MultipartFile[]) {
MultipartFile[] files = (MultipartFile[]) arg;
Map<String, Object> t = new HashMap<>();
for (MultipartFile file : files) {
t.put("file", getFileParam(file));
}
params.put("files", t);
} else {
try {
params.put(arg.getClass().getSimpleName(), arg);
} catch (Exception e) {
e.printStackTrace();
}
}
}
try {
logger.info("<ip:{}> {} <{}> params=>{}", remoteAddr, method, url, JSON.toJSONString(params));
}catch (Exception e){
e.printStackTrace();
}
}
@AfterReturning(returning = "obj", pointcut = "log()")
public void doAfterReturning(Object obj) {
logger.info("response=>{}", obj.toString());
}
private Map<String, Object> getFileParam(MultipartFile file) {
Map<String, Object> params = new HashMap<>();
params.put("文件名", file.getOriginalFilename());
params.put("文件类型", file.getContentType());
params.put("文件大小", FileUtil.getFileSize(file.getSize()));
return params;
}
}