package com.common.aspect;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.serializer.SerializeFilter;
|
import com.alibaba.fastjson.serializer.SimplePropertyPreFilter;
|
import com.alibaba.fastjson.serializer.ValueFilter;
|
import com.common.security.utils.IpUtil;
|
import com.deloitte.system.model.SysLog;
|
import com.deloitte.system.request.FileRequest;
|
import eu.bitwalker.useragentutils.UserAgent;
|
import lombok.extern.slf4j.Slf4j;
|
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.aspectj.lang.reflect.MethodSignature;
|
import org.springframework.core.annotation.Order;
|
import org.springframework.stereotype.Component;
|
import org.springframework.web.context.request.RequestContextHolder;
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.io.BufferedReader;
|
import java.io.IOException;
|
import java.lang.reflect.Field;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Objects;
|
|
/**
|
* @author 廖振钦
|
* @date 2022-01-14
|
*/
|
@Slf4j
|
@Aspect
|
@Component
|
@Order(1)
|
public class LogAspect {
|
|
@Pointcut("execution(* com..controller..*.*(..)) && (@annotation(org.springframework.web.bind.annotation.RequestMapping)" +
|
"|| @annotation(org.springframework.web.bind.annotation.GetMapping)" +
|
"|| @annotation(org.springframework.web.bind.annotation.PostMapping)" +
|
"|| @annotation(org.springframework.web.bind.annotation.DeleteMapping)" +
|
"|| @annotation(org.springframework.web.bind.annotation.PatchMapping))"+
|
"&& !@annotation(com.common.annotation.NoLog)")
|
public void controllerMethodPointcut() {
|
}
|
|
@Before("controllerMethodPointcut()")
|
public void doBefore(JoinPoint point) {
|
try {
|
handleLog(point);
|
} catch (Throwable e) {
|
log.error("LogAspect>>>>>>>>", e);
|
throw e;
|
}
|
}
|
|
protected void handleLog(JoinPoint point) {
|
HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
|
String uri = request.getRequestURI();
|
UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("user-agent"));
|
String clientType = userAgent.getOperatingSystem().getDeviceType().toString();
|
log.info("clientType = " + clientType); //客户端类型 手机、电脑、平板
|
String os = userAgent.getOperatingSystem().getName();
|
log.info("os = " + os); //操作系统类型
|
String ip = IpUtil.getIpAddr(request);
|
log.info("ip = " + ip); //请求ip
|
String browser = userAgent.getBrowser().toString();
|
log.info("browser = " + browser); //浏览器类型
|
// log.info(Thread.currentThread().getName()+",requestparam="+ JSONObject.toJSONString(point.getArgs()));
|
SysLog sysLog = new SysLog();
|
if(uri.endsWith("/file/upload")){
|
FileRequest param=(FileRequest)point.getArgs()[0];
|
JSONObject jsonObject=new JSONObject();
|
jsonObject.put("fileName",param.getFileName());
|
jsonObject.put("size",param.getSize());
|
sysLog.ip(ip).retContent("request:" + jsonObject).uri(uri);
|
}else if(uri.endsWith("/file/batchupload")){
|
List<FileRequest> param=(List<FileRequest>)point.getArgs()[0];
|
JSONArray jsonArray=new JSONArray();
|
if(CollectionUtil.isNotEmpty(param)) {
|
for (int i = 0; i < param.size(); i++) {
|
JSONObject jsonObject = new JSONObject();
|
jsonObject.put("fileName", param.get(i).getFileName());
|
jsonObject.put("size", param.get(i).getSize());
|
jsonArray.add(jsonObject);
|
}
|
sysLog.ip(ip).retContent("request:" + jsonArray).uri(uri);
|
}
|
}else{
|
SerializeFilter filter=new ValueFilter() {
|
@Override
|
public Object process(Object o, String s, Object o1) {
|
if(o instanceof MultipartFile){
|
return null;
|
}
|
if(o1 instanceof MultipartFile){
|
return null;
|
}
|
return o1;
|
}
|
};
|
|
sysLog.ip(ip).retContent("request:" + JSONObject.toJSONString(point.getArgs(),filter)).uri(uri);
|
}
|
sysLog.save();
|
}
|
}
|