packagecom.spring4all.config;importcom.alibaba.fastjson.JSON;importcom.spring4all.config.intercepors.MyLog;importcom.spring4all.entity.SysLogDO;importcom.spring4all.service.SysLogService;importorg.aspectj.lang.JoinPoint;importorg.aspectj.lang.annotation.AfterReturning;importorg.aspectj.lang.annotation.Aspect;importorg.aspectj.lang.annotation.Pointcut;importorg.aspectj.lang.reflect.MethodSignature;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Component;importjavax.servlet.http.HttpServletRequest;importjava.lang.reflect.Method;importjava.util.Date;/***@authorshafei
*@version1.0
* @date 10:08 2019/9/7
* fun:*/@Aspect
@Componentpublic classSysLogAspect {
@AutowiredprivateSysLogService sysLogService;//定义切点 @Pointcut//在注解的位置切入代码
@Pointcut("@annotation( com.spring4all.config.intercepors.MyLog)")public voidlogPoinCut() {
}//切面 配置通知
@AfterReturning("logPoinCut()")public voidsaveSysLog(JoinPoint joinPoint) {
System.out.println("切面。。。。。");//保存日志
SysLogDO sysLog = newSysLogDO();//从切面织入点处通过反射机制获取织入点处的方法
MethodSignature signature =(MethodSignature) joinPoint.getSignature();//获取切入点所在的方法
Method method =signature.getMethod();//获取操作
MyLog myLog = method.getAnnotation(MyLog.class);if (myLog != null) {
String value=myLog.value();
sysLog.setOperation(value);//保存获取的操作
}//获取请求的类名
String className =joinPoint.getTarget().getClass().getName();//获取请求的方法名
String methodName =method.getName();
sysLog.setMethod(className+ "." +methodName);//请求的参数
Object[] args =joinPoint.getArgs();//将参数所在的数组转换成json
String params =JSON.toJSONString(args);
sysLog.setParams(params);
sysLog.setCreateDate(newDate());//获取用户名
sysLog.setUsername("shafei");//获取用户ip地址//HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
sysLog.setIp("192.168.3.11");//调用service保存SysLog实体类到数据库//sysLogService.save(sysLog);
System.out.println("将日志记录到数据库");
}
}