若依注解学习(一)@Log

2023-09-18 11:28:39

@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生产你要执行的任务·
                    

更多推荐

Flink窗口

窗口(Window)6.1.1窗口的概念Flink是一种流式计算引擎,主要是来处理无界数据流的,数据源源不断、无穷无尽。想要更加方便高效地处理无界流,一种方式就是将无限数据切割成有限的“数据块”进行处理,这就是所谓的“窗口”(Window)。注意:Flink中窗口并不是静态准备好的,而是动态创建——当有落在这个窗口区间

OpenCV自学笔记二十一:视频处理

一、VideoCapture类在OpenCV中,`VideoCapture`类提供了一系列函数来读取和控制视频流。以下是一些常用的`VideoCapture`类函数说明:1.`isOpened()`:检查视频是否成功打开。返回一个布尔值,True表示成功打开,False表示未成功打开。2.`open(filenameo

React 窗口防抖_ 提升网页性能的利器

React窗口防抖是一种优化网页性能的技术,它能够有效地减少浏览器中不必要的渲染和计算,从而提高网页的响应速度和用户体验。在本文中,我们将探讨React窗口防抖的原理、应用场景以及如何在你的React项目中使用它。引言随着互联网的发展,越来越多的网页应用需要处理大量的数据和复杂的交互逻辑。而这些复杂的操作往往会导致网页

深度学习修炼(三)卷积操作 | 边界填充、跨步、多输入输出通道、汇聚池化

文章目录1.卷积基本操作2现代卷积进阶武器操作2.1边界填充2.2跨步步幅2.3多输入输出通道2.4汇聚池化3.卷积层设计之前我们讲了线性分类器深度学习修炼(一)线性分类器|权值理解、支撑向量机损失、梯度下降算法通俗理解_Qodi的博客-CSDN博客又讲了基于线性分类器的全连接神经网络深度学习修炼(二)全连接神经网络|

ElasticSearch从入门到精通(一)

1.初识ElasticSearch传统数据库查询的问题:如果使用模糊查询,左边有通配符,不会走索引,全表扫描,效率比较慢倒排索引将文档进行分词,形成词条和id的对应关系即为反向索引。以唐诗为例,所处包含“前”的诗句正向索引:由《静夜思》-->窗前明月光--->“前”字反向索引:“前”字-->窗前明月光-->《静夜思》反

git 常用命令总结

gitinit:初始化一个Git仓库。例:在项目目录下打开终端,输入gitinit即可将该目录初始化为Git仓库。gitadd:将文件添加到暂存区。例:将新添加的文件a.txt添加到暂存区,命令为gitadda.txt。gitcommit:将暂存区的文件提交到本地仓库。例:将暂存区的文件提交到本地仓库,并添加提交注释,

C语言文件的相关操作

C语言中文件的相关操作文件的打开使用文件的打开函数需要引入这个头文件:#include<fcntl.h>open函数intopen(charconst*pathname,intflags,mode_tmode)功能:打开已有的文件或者创建新文件参数pathname:文件路径名,可以是相对路径或绝对路径flags:打开文

[MIT6.824] Spring2021 Lab 2: Raft

0x1ReadingPaperRaft协议感觉目标很简单:保证分布式系统的一致性和可用性,在阅读时,我联想到之前看的ARIES论文,感觉思维有很多共通之处,比如如何通过非易失性存储来保证持久性。但是ARIES中是单个机器崩溃导致内存内容丢失,通过硬盘上的LOGs来重做数据库,并且ABORT掉未提交的记录并写入CLR。R

uni-app实现web-view图片长按下载

<template><view><web-view:webview-styles="webviewStyles":src="webUrl"></web-view></view></template>uniapp的web-view中图片无法长按保存,IOS下是正常的,但是Android下长按无反应解决方案:下载mui.m

什么是C语言中的命名空间?

C语言本身并没有像某些其他编程语言(如C++)中的显式命名空间(namespace)的概念,但C语言中有一些机制和约定,允许开发人员组织和管理变量、函数和其他标识符的名称,以避免名称冲突和提高代码可维护性。本文将介绍C语言中的命名空间概念,包括作用域、静态变量、文件作用域、函数作用域以及如何避免名称冲突。作用域(Sco

会C++还需要再去学Python吗?

提到的C++、数据结构与算法、操作系统、计算机网络和数据库技术等确实是计算机科学中非常重要的基础知识领域,对于软件开发和计算机工程师来说,它们是必备的核心知识。掌握这些知识对于开发高性能、可靠和安全的应用程序非常重要。Python作为一种脚本语言,在某些场景下确实可以作为加分项或辅助工具使用。它具有易学易用的特点,并且

热文推荐