1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- package net.chenlin.dp.common.aspect;
- import net.chenlin.dp.common.annotation.SysLog;
- import net.chenlin.dp.common.utils.CommonUtils;
- import net.chenlin.dp.common.utils.JSONUtils;
- import net.chenlin.dp.common.utils.ShiroUtils;
- import net.chenlin.dp.common.utils.WebUtils;
- import net.chenlin.dp.modules.sys.dao.SysLogMapper;
- import net.chenlin.dp.modules.sys.entity.SysLogEntity;
- import net.chenlin.dp.modules.sys.entity.SysUserEntity;
- 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.stereotype.Component;
- import java.lang.reflect.Method;
- /**
- * 系统日志,切面处理类
- * @author zcl<yczclcn@163.com>
- */
- @Aspect
- @Component
- public class SysLogAspect {
-
- @Autowired
- private SysLogMapper sysLogMapper;
-
- @Pointcut("@annotation(net.chenlin.dp.common.annotation.SysLog)")
- public void logPointCut() {
-
- }
- @Around("logPointCut()")
- public Object around(ProceedingJoinPoint point) throws Throwable {
- long beginTime = System.currentTimeMillis();
- //执行方法
- Object result = point.proceed();
- //执行时长(毫秒)
- long time = System.currentTimeMillis() - beginTime;
- //保存日志
- saveSysLog(point, time);
- return result;
- }
- private void saveSysLog(ProceedingJoinPoint joinPoint, long time) {
- MethodSignature signature = (MethodSignature) joinPoint.getSignature();
- Method method = signature.getMethod();
- SysLogEntity sysLog = new SysLogEntity();
- SysLog syslog = method.getAnnotation(SysLog.class);
- if(syslog != null){
- //注解上的描述
- sysLog.setOperation(syslog.value());
- }
- //请求的方法名
- String className = joinPoint.getTarget().getClass().getName();
- String methodName = signature.getName();
- sysLog.setMethod(className + "." + methodName + "()");
- //请求的参数
- Object[] args = joinPoint.getArgs();
- try{
- String params = JSONUtils.beanToJson(args[0]);
- sysLog.setParams(params);
- }catch (Exception e){
- }
- //设置IP地址
- sysLog.setIp(WebUtils.getIpAddr());
- //用户名
- SysUserEntity currUser = ShiroUtils.getUserEntity();
- if(CommonUtils.isNullOrEmpty(currUser)) {
- if(CommonUtils.isNullOrEmpty(sysLog.getParams())) {
- sysLog.setUserId(-1L);
- sysLog.setUsername(sysLog.getParams());
- } else {
- sysLog.setUserId(-1L);
- sysLog.setUsername("获取用户信息为空");
- }
- } else {
- sysLog.setUserId(ShiroUtils.getUserId());
- sysLog.setUsername(ShiroUtils.getUserEntity().getUsername());
- }
- sysLog.setTime(time);
- //保存系统日志
- sysLogMapper.save(sysLog);
- }
-
- }
|