AOP 实现日志记录的功能

若依框架使用springboot+AOP+自定义注解+反射实现操作日志记录修改前后数据,并保存至数据库日志表中 阅读详情

要求:
在controller层对update , insert , delete类型的请求对应的方法 进行拦截, 然后获取方法的请求参数,
根据不同的请求类型, 想日志表中计入不同的内容. 这样就可以实现每次改动数据库中表时,就会记录日志.
一般日志表会会记录如下内容:
修改人id
表名称
修改数据行id
修改时间
请求端ip地址
修改内容
实现方式:
我们以update操作计入日志为例
在controller层的update类型的方法上加一个注解(可以是自定义注解, 也可以用springboot的注解)
单独定义一个切面类OperLogAspect , 将加在方法上的注解定义为一个切点.
对这个切点加一个前置通知, 前置通知里 执行计入日志信息的操作.

具体实现如下:
首先看controller层

public class CConsController extends BasicController<CCons,ICConsService>{
@PreAuthorize("hasAuthority('billing:cons:insert')")
	@PostMapping(value = "/insert")
	public ResponseResult<Object> insert(@RequestBody(required = false) Map<String, Object> paraMap) {...}
}

在insert方法前, 加了一个preAuthorize注解, 注解的value是billing:cons:insert

然后定义一个切面类

@Aspect
@Component
@Slf4j
public class OperLogAspect {
    @Pointcut("@annotation(org.springframework.security.access.prepost.PreAuthorize)")
    public void operLogPointCut(){

    }


  @Before(value = "operLogPointCut()")
    public void saveOperLog(JoinPoint joinPoint){
    // 从切面织入点处通过反射机制获取织入点处的方法
            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
            // 获取切入点所在的方法
            Method method = signature.getMethod();
            // 获取操作
            PreAuthorize preAuthorize = method.getAnnotation(PreAuthorize.class);
            String pre = preAuthorize.value();
            //如果pre中包含update的字符串的话, 记日志时将修改前数据和修改后数据都记录日志
            //如果pre中包含insert/delete的话, 记日志时只用将被改的数据计入日志即可
            Class<IBasicService> basicService = (Class<IBasicService>) ((ParameterizedType) joinPoint.getTarget().getClass().getGenericSuperclass()).getActualTypeArguments()[1];
                IBasicService service = (IBasicService) SpringUtil.getBean(basicService);
                Class<BasicEntity> entityClass = (Class<BasicEntity>) ((ParameterizedType) joinPoint.getTarget().getClass().getGenericSuperclass()).getActualTypeArguments()[0];
        //表名称
        String tablename = entityClass.newInstance().getTableName();
		//从线程池获取用户信息
		//request中获取ip地址
		//创建日志模板类, 填入日志的数据
		//调用日志service的insert方法插入日志数据
	}
}

这里解释一些方法:
getTarget() 获取被调方法的代理类
getClass() 获取类类型
getGenericSuperclass() 获取类的带泛型的父类
joinPoint.getTarget().getClass().getGenericSuperclass(): 获取被调方法的代理类的类类型后获取该类的带泛型的父类
getActualTypeArguments()[0] : 获取第一个泛型
留意controller层, 会发现他的父类传了两个泛型 , 第一个是model , 第二个是service

Spring AOP 实现日志记录功能 最近项目中需要记录日志,跟大家想的一样 ,利用spring aop去实现,之前也参考了一些代码,自己实现了一套设计,供大家参考。之前看到网上很多是基于切面类Aspect去实现了,在切面类中定义before after around等逻辑以及要拦截等方法。本文利用注解实现了一套可以扩展等日志记录模块。1. 定义注解@Target(ElementType.METHOD) @Retention(Rete... 阅读详情

相关推荐

spring aop 实现用户操作日志记录功能

LogAspect.javapackage com.yangjf.commons; import java.lang.reflect.Method; import java.util.Date; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.asp

qq_27242475的博客 1万+

使用AOP切面实现日志记录功能

说到AOP大家都可以想到他是面向切面的编程,它通过将横切关注点(例如日志记录、事务管理、权限控制等)从主要业务逻辑中分离出来,以模块化的方式进行管理。在AOP中,通过定义切面(Aspect)来捕获和处理横切关注点,然后将其应用于特定的目标对象或方法。官方的解释有点抽象,我们举个例子说明:假设我们需要在多个方法中添加日志记录功能。传统的方式是在每个方法中都添加日志代码,但这样会导致代码重复,并且当我们需要修改日志记录逻辑时,需要逐个修改所有方法。

心态的博客 6215

VNC Viewer建立多个图形界面,来远程访问同一个服务器(Ubuntu)

如题。目前已经有了一个VNC viewer连接,那么如果再开一个图形界面呢? 思路主要是:新建一个用户,从这个用户新建一个vnc连接,然后访问图形界面。

the Blog of 等不到天亮丶等时光 5897

aop实现日志功能

aop实现日志功能

q1174591103的博客 1990

当LightGBM推理遇上GPU:3种替代方案性能对比(含ONNX实战代码)

本文针对LightGBM官方不支持GPU推理的性能瓶颈,深度评测了RAPIDS cuML、ONNX Runtime GPU和Triton Inference Server三种GPU加速推理替代方案。通过详尽的性能对比和实战代码,为高并发、低延迟的在线预测场景提供了清晰的选型指南,帮助工程师打破推理性能枷锁,实现显著的吞吐量提升。

salt9的博客 812

Trae 保姆级使用指南,零基础小白也能实现编程。

Trae 使用指南 Trae AI 使用 零基础编程 满血版 DeepSeek-R1&V3 AI IDE 深度理解中文开发场景 傻瓜式编程 编程入门 开发入门

Mr.L-OAM的博客 5814

【Springboot】基于AOP实现操作日志记录

基于AOP实现springboot项目中中的操作日志记录功能

ASL2915的博客 2681

低光照图像增强:从传统方法到深度学习

低光照图像增强:从传统方法到深度学习​ 人工智能,计算机视觉,大模型,AI,本文聚焦视觉模型的偏差与公平性问题,阐述了偏差在性别、种族、年龄等方面的表现及对医疗、司法、安防等领域的影响。分析了偏差源于数据采集与标注问题及算法局限。介绍了准确率差异等公平性评估指标、相关数据集和工具,还给出数据处理、算法改进、模型训练等避免歧视的策略,并附代码示例与实际案例,为提升视觉模型公平性提供多方面参考。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 2万+

AOP实现日志记录

运行项目,访问 @PutMapping(“/user/userInfo”) 即可打印日志信息。这个请求之后的日志 -> handleBefore。这个请求之前的日志 -> handleAfter。2、注解类SystemLog。3、切面类LogAspect。handleBefore 在。handleAfter 在。自定义注解方式 实现。

风也温柔☆的博客 701

在WIN10系统中安装TIA博途V18,重启后提示安装介质不可用,请插入DVD 或检查网络连接的解决办法

在WIN10系统中安装TIA博途V18,重启后提示安装介质不可用,请插入DVD 或检查网络连接的解决办法

Robot_PLC_HMI_Automation 1万+

公文流转系统

公文录入区 | QLineEdit(文号/标题)、QComboBox(公文类型/紧急程度)、QTextEdit(正文)、QListWidget(附件列表)、QPushButton(上传附件/保存草稿/提交审批) |// 按时间范围获取。QStringList userNames = {"张三", "李四", "王五", "赵六", "钱七", "孙八", "周九", "吴十", "郑十一", "王十二"};

寒寒豆豆软件公司的博客 549

【SpringBoot】SpringBoot中使用AOP实现日志记录功能

在开发企业级应用时,完善的日志记录系统对于问题排查、系统监控和用户行为分析都至关重要。传统的日志记录方式往往需要在每个方法中手动添加日志代码,这不仅增加了代码量,也使得业务逻辑与日志记录代码耦合在一起。SpringAOP(面向切面编程)为我们提供了一种优雅的解决方案,可以无侵入式地实现日志记录功能。本文将详细介绍如何在SpringBoot项目中利用AOP实现统一的日志记录功能。/*** 操作名称* @return*//*** 操作的类型* @return*/

记录学习路上的每一个 “啊哈!” 时刻 欢迎交流,共同进步! 2597

基于TKVA与深度学习的量子点微型光谱仪光谱重建改进算法研究

本文提出了一种融合深度学习的改进TKVA算法(TKVA-DL),用于提升量子点微型光谱仪的光谱重建精度。该方法创新性地结合深度先验网络与注意力机制,通过自适应学习光谱隐式先验替代传统固定正则化项,并动态加权探测器响应通道。实验表明,所提方法在仿真和实测数据上均显著优于传统TKVA及主流深度学习算法,RMSE降低35%,PSNR提升4.2 dB,同时保持物理可解释性。完整MATLAB实现验证了方法的有效性与可复现性,为微型光谱仪的高精度重建提供了新思路。 关键词:量子点微型光谱仪;光谱重建;Tikhonov正

AI的内部世界的博客 81

使用AOP在SpringBoot中实现日志记录功能

大家好,我是默语博主。在这篇博客中,我们将深入探讨如何在SpringBoot中使用AOP(面向切面编程)实现日志记录功能。✨AOP是Spring框架中的一个强大特性,能够帮助开发者以非侵入的方式添加功能,如日志记录、事务管理等。本文将详细介绍AOP的基本概念,并通过代码示例演示如何在SpringBoot中实现日志记录。希望本文能为您提供有价值的指导,并帮助您更好地掌握SpringBoot中的AOP技术。面向切面编程(AOP)是一种编程范式,旨在提高代码的模块化。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 2159

基于Python的股票K线图爬取与形态识别系统

本文详细介绍了一个基于Python的股票K线图爬取与形态识别系统。该系统通过网络爬虫技术获取股票历史数据,使用Matplotlib生成K线图,并应用卷积神经网络(CNN)对经典K线形态进行识别。文章详细阐述了数据采集、K线图生成、CNN模型构建与训练的完整流程,并提供了完整的代码实现。本研究为金融科技领域的毕业设计提供了有价值的参考方案。关键词:Python爬虫、K线图、卷积神经网络、形态识别、股票交易。

2201_76125261的博客 1033

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java aop日志记录_AOP实现日志记录功能

场景:整个系统的DML操作需要记录日志记录内容:1 操作人 2 操作时间 3 操作类型(登录 新增 修改 删除) 4 操作描述 5 详细请求数据(varchar2()) 6 操作IP ==>日志表实现:原来方式:在每个方法的里面编写记录日志代码;缺点:代码重复 ,与原有逻辑耦合度高。AOP: 将日志记录功能提取到切面中。动态切入到需要日志记录的方法上即可;优点: 解耦合,代码复用。1) ...

weixin_36162235的博客 2529

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SpringBoot中使用AOP实现日志记录功能

日志记录在软件开发中是极其重要的,能够帮助开发人员快速定位问题、监控系统性能、提高系统安全性、跟踪业务流程等,是保障系统稳定运行和快速问题排查的重要手段

customer08的博客 1816

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Spring 注解+AOP实现日志记录功能

注解类上的三个注解称为元注解(),其分别代表的含义如下: @Documented:注解信息会被添加到Java文档中 @Retention:注解的生命周期,表示注解会被保留到什么阶段,可以选择编译阶段、类加载阶段,或运行阶段(). @Target:注解作用的位置,表示该注解仅能作用于方法上 目前注解可以加到方法上,但是并没有任何作用。因为仅仅是声明了注解,下面通过Spring AOP去完善注解的作用。 Spring AOP的基础知识 AOP 术语Spring切面可以应用5种类型的通知 日志记录演示

Carroll的博客 1352

使用spring 的 AOP 实现操作日志记录功能

一、添加 maven 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> 二、定义一个操作日志注解类 OpeLog (需要记录模块、操作类型的可以把注释的解开,因我这里只记录增加和修改的操作记录,所以只要一个操作说明) package c

qq_37537009的博客 494

java 实现AOP日志记录功能

                 目前整个开发社区对AOP(Aspect Oriented Programing)推崇备至,也涌现出大量支持AOP的优秀Framework,--Spring, JAC, Jboss AOP 等等。AOP似乎一时之间成了潮流。Java初学者不禁要发出感慨,OOP还没有学通呢,又来AOP。本文不是要在理论上具体阐述何为AOP, 为何要进行AOP . 要详细了解学习A...

a8366的专栏 260

spring AOP实现请求日志记录功能

在实际开发中,对于外部调用接口时,要记录每一次请求的参数,以及应用响应内容给调用者。这时候,我们可以采用AOP技术针对指定的请求,指定的方法进行拦截记录日志。 首先定义AOP切面类,代码如下 /** * @ClassName: SupplierInvokeLogAspect ...

chenghuagui9785的博客 3146

springboot整合AOP实现操作日志记录功能

什么是AOP? AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP能够在方法的前置,中置,后置中插入逻辑代码,将逻辑独立于业务代码之外,一处编写,多处使用。 重点名词 切面(ASPECT):横切关注点 被模块化 的特殊对象。即,它是一个类。 通知(Advice):切面必须要完成的工

三水沁 2480

Aop实现请求日志记录功能

环境 SpringBoot2.0 maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> ...

weixin_38169722的博客 183

通过AOP+自定义注解实现日志记录功能

Target({ ElementType.PARAMETER, ElementType.METHOD })//表示只能用在方法或者方法的参数上@Retention(RetentionPolicy.RUNTIME)//注解保留在运行时,可以通过反射读取@Documented//注解信息会出现在 Javadoc 中/*** 模块*//*** 功能*//*** 操作人类别*//*** 是否保存请求的参数*//*** 是否保存响应的参数*//**

weixin_65790121的博客 1523
上一篇: docker 安装 jenkins
下一篇: springboot 操作rabbitmq 的一些心得记录
libingbojava
博客等级 码龄9年 64粉丝 111原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值