通过AOP实现系统日志管理(1)

1,369 阅读2分钟

这是我参与 8 月更文挑战的第 14 天,活动详情查看: 8月更文挑战

目标

在系统中开发一个日志管理模块,这个模块主要用来记录某个用户调用了哪个方法,做了什么操作,这样当有用户有违规操作时,或发现数据库中数据被恶意篡改时,就能立刻定位出是哪个用户干的,快速定位出问题所在。

方法

使用Springboot中的AOP来实现记录用户操作,采取AOP的方法,可以使记录用户操作的代码独立于其他的业务逻辑代码,不妨碍业务正常运行,也有利于后期的维护。

AOP(Aspect Oriented Programming)即面向切面编程,是通过预编译方式和运行期动态代理的方式实现不修改源代码的情况下给程序动态统一添加功能的技术。

想要进一步了解AOP,可以移步官网

具体实现步骤

1. 在pom.xml中添加AOP依赖

  <!-- aop依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

2. 数据库表设计

我用的Oracle数据库,若要使用mysql,只需要将数据类型换一下就可。

同时,我用的mybatis连接数据库,如要进行后面操作,要在pom.xml上添加Mybatis依赖。具体可以看这篇文章:Mybatis连接Oracle数据库

截屏2021-08-15 下午11.30.39

3. Pojo层

pojonew一个名为SysLog的java文件。

package com.tjm.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@NoArgsConstructor
@Data
public class SysLog {
    int log_id;
    String username;
    String class_name;
    String method_name;
    String args;
}

4. service层

创建service接口文件以及接口实现类,代码如下:

SysLogService

package com.tjm.service;

import com.tjm.pojo.SysLog;
import org.springframework.stereotype.Service;

@Service
public interface SysLogService {

    int insertLog(SysLog log);
}

SysLogServiceImpl

package com.tjm.service;

import com.tjm.mapper.LogMapper;
import com.tjm.pojo.SysLog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service("sysLogService")
public class SysLogServiceImpl implements SysLogService{

    @Autowired
    private LogMapper logMapper;

    @Override
    public int insertLog(SysLog log) {
        return logMapper.insertLog(log);
    }
}

通过AOP实现系统日志管理(2)