commit init
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
package com.cnbm.admin.aspect;
|
||||
|
||||
import com.cnbm.admin.annotation.LogOperation;
|
||||
import com.cnbm.admin.entity.LoginUser;
|
||||
import com.cnbm.admin.entity.SysLogOperationEntity;
|
||||
import com.cnbm.admin.enums.OperationStatusEnum;
|
||||
import com.cnbm.admin.service.SysLogOperationService;
|
||||
import com.cnbm.common.utils.HttpContextUtils;
|
||||
import com.cnbm.common.utils.IpUtils;
|
||||
import com.cnbm.common.utils.JsonUtils;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.aspectj.lang.annotation.Pointcut;
|
||||
import org.aspectj.lang.reflect.MethodSignature;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 9:41 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Aspect
|
||||
@Component
|
||||
public class LogOperationAspect {
|
||||
|
||||
@Autowired
|
||||
private SysLogOperationService sysLogOperationService;
|
||||
|
||||
@Pointcut("@annotation(com.cnbm.admin.annotation.LogOperation)")
|
||||
public void logPointCut() {
|
||||
|
||||
}
|
||||
|
||||
@Around("logPointCut()")
|
||||
public Object around(ProceedingJoinPoint point) throws Throwable {
|
||||
long beginTime = System.currentTimeMillis();
|
||||
try {
|
||||
//执行方法
|
||||
Object result = point.proceed();
|
||||
|
||||
//执行时长(毫秒)
|
||||
long time = System.currentTimeMillis() - beginTime;
|
||||
//保存日志
|
||||
saveLog(point, time, OperationStatusEnum.SUCCESS.value());
|
||||
|
||||
return result;
|
||||
}catch(Exception e) {
|
||||
//执行时长(毫秒)
|
||||
long time = System.currentTimeMillis() - beginTime;
|
||||
//保存日志
|
||||
saveLog(point, time, OperationStatusEnum.FAIL.value());
|
||||
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
private void saveLog(ProceedingJoinPoint joinPoint, long time, Integer status) throws Exception {
|
||||
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
|
||||
Method method = joinPoint.getTarget().getClass().getDeclaredMethod(signature.getName(), signature.getParameterTypes());
|
||||
LogOperation annotation = method.getAnnotation(LogOperation.class);
|
||||
|
||||
SysLogOperationEntity log = new SysLogOperationEntity();
|
||||
if(annotation != null){
|
||||
//注解上的描述
|
||||
log.setOperation(annotation.value());
|
||||
}
|
||||
|
||||
//登录用户信息
|
||||
UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
|
||||
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
||||
if(loginUser != null){
|
||||
log.setCreatorName(loginUser.getUsername());
|
||||
}
|
||||
|
||||
log.setStatus(status);
|
||||
log.setRequestTime((int)time);
|
||||
|
||||
//请求相关信息
|
||||
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
|
||||
log.setIp(IpUtils.getIpAddr(request));
|
||||
log.setUserAgent(request.getHeader(HttpHeaders.USER_AGENT));
|
||||
log.setRequestUri(request.getRequestURI());
|
||||
log.setRequestMethod(request.getMethod());
|
||||
|
||||
//请求参数
|
||||
Object[] args = joinPoint.getArgs();
|
||||
try{
|
||||
String params = JsonUtils.toJsonString(args[0]);
|
||||
log.setRequestParams(params);
|
||||
}catch (Exception e){
|
||||
|
||||
}
|
||||
|
||||
//保存到DB
|
||||
sysLogOperationService.save(log);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user