AOP的日志管理
程序员文章站
2022-03-02 15:39:49
...
- 编写一个通知类:必须让springmvc能扫描到
- 添加一个注解@Component交给springmvc容器管理
- 添加一个注解@Aspect 声明它是通知类
- 编写一个增强的方法
- 添加环绕通知注解
@Around("exection(* cn.itcast.web.controller..*.*(..))")
- 执行原来的逻辑
- 组装日志对象
- 调用SysLogService中save方法,保存日志
- 添加环绕通知注解
- 在springmvc.xml中开启aop的自动代理
@Component
@Aspect
public class SysLogAspect {
@Autowired
HttpSession session;
@Autowired
HttpServletRequest request;
@Autowired
SysLogService sysLogService;
@Around("execution(* cn.itcast.web.controller..*.*(..))")
public Object saveSysLog(ProceedingJoinPoint pjp) throws Throwable {
//让目标方法执行
Object result = pjp.proceed();
//组装日志对象
SysLog sysLog = new SysLog();
//获取当前登陆的用户
User loginUser = (User) session.getAttribute("loginUser");
if (loginUser!=null) {
sysLog.setUserName(loginUser.getUserName());
sysLog.setIp(request.getLocalAddr());
sysLog.setTime(new Date());
//获取请求的方法
MethodSignature signature = (MethodSignature) pjp.getSignature();//获取方法签名
Method method = signature.getMethod();
sysLog.setMethod(method.getName());
//设置方法的描述,就是@RequestMapping注解的name属性值
RequestMapping anno = method.getAnnotation(RequestMapping.class);
sysLog.setAction(anno.name());
sysLog.setCompanyId(loginUser.getCompanyId());
sysLog.setCompanyName(loginUser.getCompanyName());
//保存日志
sysLogService.save(sysLog);
}
return result;
}
}```
上一篇: 【JPA】Spring DATA JPA
下一篇: Spring Aop 日志管理