企业权限管理(十六)-aop日志

SysLog实体类

public class SysLog {private String id;private Date visitTime;private String visitTimeStr;private String username;private String ip;private String url;private Long executionTime;private String method;public String getId() {return id;}public void setId(String id) {this.id = id;}public Date getVisitTime() {return visitTime;}public void setVisitTime(Date visitTime) {this.visitTime = visitTime;}public String getVisitTimeStr() {return visitTimeStr;}public void setVisitTimeStr(String visitTimeStr) {this.visitTimeStr = visitTimeStr;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public Long getExecutionTime() {return executionTime;}public void setExecutionTime(Long executionTime) {this.executionTime = executionTime;}public String getMethod() {return method;}public void setMethod(String method) {this.method = method;}
}

后置对象

 LogAop

@Component
@Aspect
public class LogAop {@Autowiredprivate HttpServletRequest request;@Autowiredprivate ISysLogService sysLogService;private Date visitTime; //开始时间private Class clazz; //访问的类private Method method;//访问的方法//前置通知  主要是获取开始时间,执行的类是哪一个,执行的是哪一个方法@Before("execution(* com.itheima.ssm.controller.*.*(..))")public void doBefore(JoinPoint jp) throws NoSuchMethodException {visitTime = new Date();//当前时间就是开始访问的时间clazz = jp.getTarget().getClass(); //具体要访问的类String methodName = jp.getSignature().getName(); //获取访问的方法的名称Object[] args = jp.getArgs();//获取访问的方法的参数//获取具体执行的方法的Method对象if (args == null || args.length == 0) {method = clazz.getMethod(methodName); //只能获取无参数的方法} else {Class[] classArgs = new Class[args.length];for (int i = 0; i < args.length; i++) {classArgs[i] = args[i].getClass();}clazz.getMethod(methodName, classArgs);}}//后置通知@After("execution(* com.itheima.ssm.controller.*.*(..))")public void doAfter(JoinPoint jp) throws Exception {long time = new Date().getTime() - visitTime.getTime(); //获取访问的时长String url = "";//获取urlif (clazz != null && method != null && clazz != LogAop.class) {//1.获取类上的@RequestMapping("/orders")RequestMapping classAnnotation = (RequestMapping) clazz.getAnnotation(RequestMapping.class);if (classAnnotation != null) {String[] classValue = classAnnotation.value();//2.获取方法上的@RequestMapping(xxx)RequestMapping methodAnnotation = method.getAnnotation(RequestMapping.class);if (methodAnnotation != null) {String[] methodValue = methodAnnotation.value();url = classValue[0] + methodValue[0];//获取访问的ipString ip = request.getRemoteAddr();//获取当前操作的用户SecurityContext context = SecurityContextHolder.getContext();//从上下文中获了当前登录的用户User user = (User) context.getAuthentication().getPrincipal();String username = user.getUsername();//将日志相关信息封装到SysLog对象SysLog sysLog = new SysLog();sysLog.setExecutionTime(time); //执行时长sysLog.setIp(ip);sysLog.setMethod("[类名] " + clazz.getName() + "[方法名] " + method.getName());sysLog.setUrl(url);sysLog.setUsername(username);sysLog.setVisitTime(visitTime);//调用Service完成操作sysLogService.save(sysLog);}}}}
}

SysLogController 

@Controller
@RequestMapping("/sysLog")
public class SysLogController {@Autowiredprivate ISysLogService sysLogService;@RequestMapping("/findAll.do")public ModelAndView findAll() throws Exception {ModelAndView mv=new ModelAndView();List<SysLog> sysLogList= sysLogService.findAll();mv.addObject("sysLogs",sysLogList);mv.setViewName("syslog-list");return mv;}
}

SysLogServiceImpl

@Service
@Transactional
public class SysLogServiceImpl implements ISysLogService {@Autowiredprivate ISysLogDao sysLogDao;@Overridepublic List<SysLog> findAll() throws Exception {return sysLogDao.findAll();}@Overridepublic void save(SysLog sysLog) throws Exception {sysLogDao.save(sysLog);}
}

ISysLogDao

public interface ISysLogDao {@Insert("insert into syslog(visitTime,username,ip,url,executionTime,method) values(#{visitTime},#{username},#{ip},#{url},#{executionTime},#{method})")public void save(SysLog sysLog) throws Exception;@Select("select * from sysLog")List<SysLog> findAll() throws Exception;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/68268.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CDH6.3.2搭建HIVE ON TEZ

参考 https://blog.csdn.net/ly8951677/article/details/124152987 ----配置hive运行引擎 在/etc/hive/conf/hive-site.xml中修改如下&#xff1a; hive.execution.engine mr–>tez hive.execution.engine 设为tez或者运行代码的时候&#xff1a; set hive.execution.eng…

商用汽车转向系统常见故障解析

摘要&#xff1a; 车辆转向系统是用于改变或保持汽车行驶方向的专门机构。其作用是使汽车在行驶过程中能按照驾驶员的操纵意图而适时地改变其行驶方向&#xff0c;并在受到路面传来的偶然冲击及车辆意外地偏离行驶方向时&#xff0c;能与行驶系统配合共同保持车辆继续稳定行驶…

【数据结构】双向链表

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;数据结构 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、双向链表 1.1带头双向循环链表的结构 二、链表的实现 &#x1f4d2…

服务器如何防止cc攻击

对于搭载网站运行的服务器来说&#xff0c;cc攻击应该并不陌生&#xff0c;特别是cc攻击的攻击门槛非常低&#xff0c;有个代理IP工具&#xff0c;有个cc攻击软件就可以轻易对任何网站发起攻击&#xff0c;那么服务器如何防止cc攻击?请看下面的介绍。 服务器如何防止cc攻击&a…

python快速两两元素求相似矩阵

目录 1. 计算相似度矩阵2. 基于sklearn 1. 计算相似度矩阵 计算相似度矩阵的方法有很多种&#xff0c;发现了sklearn中直接有通过计算余弦相似度得到相似度矩阵的方法 1 sklearn.metrics.pairwise.cosine_similarity # 余弦相似度 2 sklearn.metrics.pairwise.pairwise_distan…

【深度学习】PyTorch快速入门

【深度学习】学习PyTorch基础 介绍PyTorch 深度学习框架是一种软件工具&#xff0c;旨在简化和加速构建、训练和部署深度学习模型的过程。深度学习框架提供了一系列的函数、类和工具&#xff0c;用于定义、优化和执行各种深度神经网络模型。这些框架帮助研究人员和开发人员专注…

英伟达结构化剪枝工具Nvidia Apex Automatic Sparsity [ASP](2)——代码分析

伟达结构化剪枝工具Nvidia Apex Automatic Sparsity [ASP]&#xff08;2&#xff09;——代码分析 ASP整个模块的结果如下&#xff1a; . ├── COPYRIGHT ├── README.md ├── __init__.py ├── asp.py ├── permutation_lib.py ├── permutation_search_kernels…

多线程并发服务器

代码&#xff1a; #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #define PORT 6666 //1024~49151 #define IP "192.168.122.130" //ifconfig查看本机IP #include <pthread.h> //…

安装使用IDEA,修改样式,配置服务,构建Maven项目(超级详细版)

目录 前言&#xff1a; 一&#xff0c;安装 1.1打开官网JetBrains: Essential tools for software developers and teams点击 Developer Tools&#xff0c;再点击 Intellij IDEA 2.点击下载​编辑 3.选择对应的版本&#xff0c;左边的 Ultimate 版本为旗舰版&#xff0c;需要…

Gin安装解决国内go 与 热加载

get 方式安装超时问题&#xff0c;国内直接用官网推荐的下面这个命令大概率是安装不成功的 go get -u github.com/gin-gonic/gin 可以在你的项目目录下执行下面几个命令&#xff1a; 比如我的项目在E:\Oproject\zl cmd E:\Oproject\zl>就在目录下执行 go env -w GO111…

MySQL8安装和删除教程 下载源码 保姆级(Windows)

删除 停止Mysql服务 管理员的权限来运行cmd&#xff0c;输入 net stop MySQL80 注意你电脑上的MySQL服务不一定是MySQL80,MySQL80是默认的&#xff0c;不是怎么办?在services.msc中找即可 下载一个小工具 geek:Geek下载打开软件&#xff0c;在列表中找到图片中的两项 sc…

代码随想录算法训练营第三十五天 | 860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球

代码随想录算法训练营第三十五天 | 860.柠檬水找零&#xff0c;406.根据身高重建队列&#xff0c;452. 用最少数量的箭引爆气球 860.柠檬水找零:eyes:题目总结:eyes: 406.根据身高重建队列:eyes:题目总结:eyes: 452. 用最少数量的箭引爆气球:eyes:题目总结:eyes: 860.柠檬水找零…