@Log
涉及到:
Log,LogAspect,SecurityUtils,SysUser,SysOperLog,BusinessStatus,StringUtils,ServletUtils
AsyncManager,AsyncFactory,AddressUtils,IpUtils,RuoYiConfig,HttpUtils,JSONObject,
ISysOperLogService
security当前用户,获取ip,获取请求信息,注解参数解析,异步处理,任务工厂,统一异常处理
位置:
在我们使用ruoyi的代码生成器的时候,在controller的每个方法出现
作用:
写在方法上,通过aop切面编程,在方法执行前、方法执行完、方法异常的时候做处理
包括对用户的每一次操作进行数据库存储,记录用户操作
Log定义位置:
common中,出现在公共模块,若出现在其他模块,极其容易出现模块相互依赖的问
题,所以ruoyi框架为什么要定义在这
aop处理:
core中,core是ruoyi框架的核心代码,在aop中对操作进行处理,其中,会调用安全框架来
获取当前用户存到SysUser中
注意这个对象也写在common,也是避免模块依赖问题
其中的shiroUtils我改成了SecurityUtils,具体逻辑就是从security安全上下文取出当前用
户,若出现异常则捕获,抛出
CustomException异常,这个异常继承了RuntimeException,会被若以的全局异常处理
(@RestControllerAdvice)
接着设置数据库日志对象,保存数据库:
SysOperLog:
设置操作为成功
ip:可以直接从security安全上下文获取
url:RequestContextHolder获取 getRequestAttributes 再获取 getRequest 再获取 getRequestURI
设置用户信息
抛出异常则把操作设置为失败
设置方法名,请求方式,根据Log上的参数设置信息
异步处理器执行任务保存数据库:
调用service,mapper保存
注意:若以框架有专门的异步处理器AsyncManager
通过AsyncManager.me().execute(AsyncFactory.recordOper(operLog));异步处理
其中AsyncManager中:
异步线程池通过springUtils获取: * spring工具类 方便在非spring管理环境中获取bean, SpringUtils.getBean("scheduledExecutorService");
单例
execute:参数为一个Task,该Task通过任务工厂AsyncFactory生产你要执行的任务·