一、在方法上加上自定义注解
二、查看自定义注解内部
三、查看其切面
package com.sinosig.label.core.web.aop;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.apache.shiro.SecurityUtils;
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.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.sinosig.label.core.model.LogManager;
import com.sinosig.label.core.model.User;
import com.sinosig.label.core.service.LogManagerService;
import com.sinosig.label.core.util.MiscUtil;
/**
* 用户点击菜单记录日志
* @author Administrator
*
*/
@Aspect
public class LogManagerAspectJ {
@Autowired
private LogManagerService logManagerService;
@Pointcut("@annotation(com.sinosig.label.core.web.aop.OperationLog)")
public void operationPointcut() {
}
@Around("operationPointcut()")
public Object aroundOperationLog(ProceedingJoinPoint joinPoint) throws Throwable {
LogManager logManager = new LogManager();
User user = (User) SecurityUtils.getSubject().getPrincipal();
if(user == null){
logManager.setUserName("超级管理员");//用户名
}else{
logManager.setUserName(user.getUsername());//用户名
}
String methodRemark = getLogonRemark(joinPoint);
logManager.setOperation(methodRemark);//菜单名
String time = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").format(new Date());
logManager.setOperationTime(time);//操作时间
//取到当前请求的request对象
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String ip = MiscUtil.getIpAddress(request);
logManager.setIpAddress(ip);//地址
Object result = null;
//方法通知前获取时间,为什么要记录这个时间呢?当然是用来计算模块执行时间的
try {
// 记录操作日志...谁..在什么时间..做了什么事情..
result = joinPoint.proceed();
//保存到数据库中
logManagerService.save(logManager);
} catch (Throwable e) {
//保存到数据库中
logManagerService.save(logManager);
}
return result;
}
// 获取方法的中文备注____用于记录用户的操作日志描述
@SuppressWarnings("rawtypes")
public static String getLogonRemark(ProceedingJoinPoint joinPoint) throws Exception {
String targetName = joinPoint.getTarget().getClass().getName();
String methodName = joinPoint.getSignature().getName();
Object[] arguments = joinPoint.getArgs();
Class targetClass = Class.forName(targetName);
Method[] method = targetClass.getMethods();
String methode = "";
for (Method m : method) {
if (m.getName().equals(methodName)) {
Class[] tmpCs = m.getParameterTypes();
if (tmpCs.length == arguments.length) {
LogonLog logonCache = m.getAnnotation(LogonLog.class);
methode = logonCache.remark();
break;
}
}
}
return methode;
}
}
在然后在想要的方法上打上注解并写上备注即可