SpringAop--系统日志简例
一、数据表和实体类的准备
我们要管理系统日志,那么数据表和实体类是必不可少的,这里编写一个简单的实体类:
/** * 系统日志实体类 * * @author Mr.song * @date 2019/05/09 17:57 */ public class SysLog implements Serializable { private String id; private String userName; private String ip; private Date time; private String method;//访问的方法名称 private String action;//进行的操作名称 //... }
同时我们还要完成Dao层和Service层相应的添加、查询方法。(比较简单,这里忽略)
这里采用基于注解的环绕通知
/** * 用于记录日志的通知 * * @author Mr.song * @date 2019/05/09 19:50 */ @Aspect //声明为切面类 @Component public class LogAspect { @Autowired private SysLogService sysLogService; @Autowired private HttpSession session; @Autowired private HttpServletRequest request; @Around("execution(* cn.dintalk.web.controller.*.*.*(..))") public Object aroundSysLog(ProceedingJoinPoint pjp) { try { //获取到切入点的签名 Signature signature = pjp.getSignature(); //将签名转为方法的签名 if (signature instanceof MethodSignature) { MethodSignature ms = (MethodSignature) signature; //获取方法 Method method = ms.getMethod(); //获取注解(判断是否为RequestMapping类型的) if (method.isAnnotationPresent(RequestMapping.class)) { //创建日志对象 SysLog sysLog = new SysLog(); //设置日志的操作方法和名称 sysLog.setMethod(method.getName()); //获取方法上的注解,设置日志的操作名称 RequestMapping requestMapping = method.getAnnotation(RequestMapping.class); sysLog.setAction(requestMapping.name()); //设置日志的用户相关信息 User user = (User) session.getAttribute("user"); if (user == null || UtilFuns.isEmpty(user.getUserName())) { //匿名访问 sysLog.setUserName("匿名"); } else { sysLog.setUserName(user.getUserName()); } //设置日志的ip和时间 sysLog.setTime(new Date()); sysLog.setIp(request.getRemoteAddr()); //添加日志 sysLogService.add(sysLog); } } //获取当前切入点方法的所需参数 Object[] args = pjp.getArgs(); //执行方法并返回 Object obj = pjp.proceed(args); return obj; } catch (Throwable e) { throw new RuntimeException(e); } } }
<!-- 开启切面注解支持 --> <aop:aspectj-autoproxy/>
//展示用户列表 @RequestMapping(value = "/list",name = "查看用户列表") public String list(@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "5") int size){ //1.查询到企业下用户的分页数据 PageInfo pageInfo = userService.findAll(companyId, page, size); //2.保存到域中进行转发 request.setAttribute("page",pageInfo); return "system/user/user-list"; }
关注微信公众号,随时随地学习
作者:Mr.SongHui
欢迎转载,但必须给出原文链接,并保留此段声明。
粉丝福利:
【腾讯云·年末有礼】云产品限时秒杀,云服务器1核2G,首年128元
【腾讯云】海外1核2G服务器低至2折,半价续费券限量免费领取!
【腾讯云】专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得
【腾讯云】热卖云产品3折起,云服务器、云数据库特惠,服务更稳,速度更快,价格更优
【腾讯云】腾讯云服务器安全可靠高性能,多种配置供您选择
【腾讯云】助力中小微企业上云,满足轻量级Web应用需求,云服务器钜惠 166元/年起
【腾讯云】云数据库全场年购3折起,新用户上云6个月仅需10元
【腾讯云】腾讯云数据库性能卓越稳定可靠,为您解决数据库运维难题
【腾讯云】腾讯云图,像PPT一样简单的数据可视化工具。5元搞定数据可视化,模板丰富,拖拖拽拽就能做出好看的可视化大屏
【腾讯云】流量包低至0.12元/GB , 结合在线教育、电商直播、社交直播场景,提供IM+直播+点播音视频组合优惠
【腾讯云】Redis单机版特惠2.1折起,为缓存业务量身定制,新用户8元起购
【腾讯云】专业版APP加固特惠5折起,可享免费兼容性测试
【腾讯云】专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得
【腾讯云·年末有礼】云产品限时秒杀,云服务器1核2G,首年128元
【腾讯云】海外1核2G服务器低至2折,半价续费券限量免费领取!
【腾讯云】专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得
【腾讯云】热卖云产品3折起,云服务器、云数据库特惠,服务更稳,速度更快,价格更优
【腾讯云】腾讯云服务器安全可靠高性能,多种配置供您选择
【腾讯云】助力中小微企业上云,满足轻量级Web应用需求,云服务器钜惠 166元/年起
【腾讯云】云数据库全场年购3折起,新用户上云6个月仅需10元
【腾讯云】腾讯云数据库性能卓越稳定可靠,为您解决数据库运维难题
【腾讯云】腾讯云图,像PPT一样简单的数据可视化工具。5元搞定数据可视化,模板丰富,拖拖拽拽就能做出好看的可视化大屏
【腾讯云】流量包低至0.12元/GB , 结合在线教育、电商直播、社交直播场景,提供IM+直播+点播音视频组合优惠
【腾讯云】Redis单机版特惠2.1折起,为缓存业务量身定制,新用户8元起购
【腾讯云】专业版APP加固特惠5折起,可享免费兼容性测试
【腾讯云】专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得
[需要广告托管服务的朋友请留步哦]
![](https://images.cnblogs.com/cnblogs_com/dintalk/1627399/o_200106070851qq.jpg)