导入坐标
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.5</version>
</dependency>
编写SPring配置文件
<aop:aspectj-autoproxy/>
定义日志类
@Data
@Alias("log")
@Component
public class SysLog {
private int id;
private Date visitTime;
private String visitTimeStr;
private String username;
private String ip;
private String url;
private Long executionTime;
private String method;
public String getVisitTimeStr() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (null != visitTime) {
visitTimeStr = format.format(visitTime);
}
return visitTimeStr;
}
}
创建AOP包 和AOP类
@Component
@Aspect
public class SysLogAop {
@Resource
private SysLog log;
@Resource
private HttpServletRequest request;
@Resource
private SysLogDao logDao;
@Before("execution(* com.yunhe.controller.*.*(..)) ")
public void before(){
Date visitTime = new Date();
log.setVisitTime(visitTime);
}
@After("execution(* com.yunhe.controller.*.*(..))")
public void after(JoinPoint point){
Date endTime = new Date();
long executionTime = endTime.getTime() - log.getVisitTime().getTime();
log.setExecutionTime(executionTime);
String methodName = point.getSignature().getName();
Class cls = point.getTarget().getClass();
String methodStr = cls.getName()+"类中的:"+methodName;
log.setMethod(methodStr);
String ip = request.getRemoteAddr();
ip = "0:0:0:0:0:0:0:1".equals(ip)?"127.0.0.1":ip;
log.setIp(ip);
String url = request.getRequestURL().toString();
log.setUrl(url);
SecurityContext context = SecurityContextHolder.getContext();
User user =(User) context.getAuthentication().getPrincipal();
String username = user.getUsername();
log.setUsername(username);
System.out.println(log);
logDao.saveLog(log);
}
}