Aop在项目中的使用(日志操作)

Aop在项目中的使用(日志操作)


1.数据库建表

SELECT * FROM md_item WHERE id = 85
CREATE TABLE `sys_log` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `log_time` DATETIME DEFAULT NULL,
  `log` VARCHAR(255) DEFAULT NULL,
  `ip` VARCHAR(255) DEFAULT NULL,
  `name` VARCHAR(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

导入数据 

INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (1, '2024-09-29 11:08:53', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (2, '2024-09-29 11:10:56', '计量单位的添加', '10.8.152.27', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (3, '2024-09-29 11:11:40', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (4, '2024-09-29 11:11:47', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (5, '2024-09-29 11:11:50', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (6, '2024-09-29 11:12:13', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (7, '2024-09-29 11:12:16', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (8, '2024-09-29 11:12:18', '计量单位的添加', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (9, '2024-09-29 11:12:18', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (10, '2024-09-29 11:12:19', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (11, '2024-09-29 11:12:21', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (12, '2024-09-29 11:12:21', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (13, '2024-09-29 11:12:22', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (14, '2024-09-29 11:12:23', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (15, '2024-09-29 11:12:27', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (16, '2024-09-29 11:12:31', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (17, '2024-09-29 11:12:33', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (18, '2024-09-29 11:12:34', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (19, '2024-09-29 11:12:34', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (20, '2024-09-29 11:12:34', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (21, '2024-09-29 11:12:36', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (22, '2024-09-29 11:12:36', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (23, '2024-09-29 11:12:37', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (24, '2024-09-29 11:12:39', '计量单位的添加', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (25, '2024-09-29 11:12:39', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (26, '2024-09-29 11:12:39', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (27, '2024-09-29 11:12:39', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (28, '2024-09-29 11:12:40', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (29, '2024-09-29 11:12:40', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (30, '2024-09-29 11:12:40', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (31, '2024-09-29 11:12:41', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (32, '2024-09-29 11:12:41', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (33, '2024-09-29 11:12:42', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (34, '2024-09-29 11:12:42', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (35, '2024-09-29 11:12:43', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (36, '2024-09-29 11:12:44', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (37, '2024-09-29 11:12:44', '分页查询计量单位', '127.0.0.1', 'admin');
INSERT INTO `sys_log`(`id`, `log_time`, `log`, `ip`, `name`) VALUES (38, '2024-09-29 11:12:45', '分页查询计量单位', '127.0.0.1', 'admin');

 

2.建实体类


import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;

/**
 * @Author yhf
 * @Date 2024/9/29
 * @Desc 200不是二百
 */
@Data
public class SysLog {
    private Integer id;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date logTime;
    private String log;
    private String ip;
    private String name;
}

3.自定义注解


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyLog {
    String value();
}

4.自定义注解去修饰controller中的方法(例!)

//写在方法上
@MyLog("分页查询计量单位")

import com.github.pagehelper.PageInfo;
import com.qf.mesadmin.annotation.MyLog;
import com.qf.mesadmin.md.unit.param.UnitSearchParam;
import com.qf.mesadmin.md.unit.service.MdUnitMeasureService;
import com.qf.mescommon.common.R;
import com.qf.mescommon.entity.md.unit.MdUnitMeasure;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @Author yhf
 * @Date 2024/9/24
 * @Desc 200不是二百
 */
//跨域
@CrossOrigin
@RestController
@RequestMapping("/md/unit")
public class MdUnitMeasureController {
    @Resource
    private MdUnitMeasureService mdUnitMeasureService;
    @GetMapping("/list")
    @MyLog("分页查询计量单位")
    public R pageUnit( UnitSearchParam unitSearchParam){
        PageInfo<MdUnitMeasure> mdUnitMeasurePageInfo = mdUnitMeasureService.unitMeasurePage(unitSearchParam);
//        System.out.println("打印一下"+unitSearchParam);
        return R.ok(mdUnitMeasurePageInfo);
    }
    @GetMapping("/list/primaryUnit")

    public R findPrimaryUnit(){
        List<MdUnitMeasure> unitMeasures = mdUnitMeasureService.getPrimaryUnit();
        return R.ok(unitMeasures);
    }
    @GetMapping("/del")
    @MyLog("计量单位的删除")
    private R delById(Integer id){
        System.out.println(id);
        Integer i = mdUnitMeasureService.unitMeasureDeleteById(id);
        return R.ok(i);
    }
    @PostMapping("/delBatch")
    @MyLog("计量单位的批量删除")
    private R delBatch(@RequestBody List<Integer> ids){
        System.out.println(ids);
        Integer i = mdUnitMeasureService.unitMeasureDeleteBatch(ids);
        return R.ok(i);
    }
    @PostMapping("/add")
    @MyLog("计量单位的添加")
    private R addMeasure(@RequestBody MdUnitMeasure mdUnitMeasure){
        System.out.println(mdUnitMeasure);
        int i = mdUnitMeasureService.unitAddMeasure(mdUnitMeasure);
        return R.ok(i);
    }
    @PostMapping("/update")
    @MyLog("计量单位的修改")
    private R updateMeasure(@RequestBody MdUnitMeasure mdUnitMeasure){
        int i = mdUnitMeasureService.updateMeasure(mdUnitMeasure);
        return R.ok(i);
    }
    /**
     * 上传excel表格
     * @return
     */
    @PostMapping("/upload/excel")
    @MyLog("计量单位的批量上传")
    //MultipartFile  见文件封装成了 对象 MultipartFile
    public R uploadExcel(MultipartFile file) {
        mdUnitMeasureService.importUnit(file);
        return R.ok();
    }
    @GetMapping("/download/excel")
    @MyLog("计量单位的批量导出")
    public R downloadExcel(HttpServletResponse response) {
        mdUnitMeasureService.exportUnit(response);
        return R.ok();
    }
    /**
     * 查询指定id的信息
     *
     * @param id
     * @return
     */
    @GetMapping("/info")
    public R unitInfo(Integer id) {
        System.out.println(id);
        MdUnitMeasure unit = mdUnitMeasureService.unitInfo(id);
        return R.ok(unit);
    }
}

5.写一个切面类【目的 切入到咱们的自定义注解修饰的方法,然后通过反射看谁访问的】

先在pom文件导入依赖

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


import com.qf.mesadmin.annotation.MyLog;
import com.qf.mesadmin.log.LogDao;
import com.qf.mescommon.entity.sys.SysLog;
import com.qf.mescommon.entity.sys.SysUser;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.springframework.web.context.ServletConfigAware;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.util.WebUtils;
​
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.Date;

​/**
 * @Author yhf
 * @Date 2024/9/24
 * @Desc 200不是二百
 */
@Component
@Aspect
@Slf4j
public class MyLogAspect {
 @Resource
 private LogDao logDao;
​
 //找到目标注解
 @Before("@annotation(com.qf.mesadmin.annotation.MyLog)")
 public void mesLog(JoinPoint joinPoint) {
     //主要的目的是  插入数据到数据库
     //id  log_time  log  ip  name
     //log_time  当前的时间   ip  远程主机的地址(s谁访问的)
     //log  日志信息 @MyLog("计量单位的批量删除")
     //name 谁登陆的!!!
     HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
     String ip = request.getRemoteAddr();
     //WebUtils.getSessionAttribute(request, "userInfo")
     SysUser sysUser = (SysUser)request.getSession().getAttribute("userInfo");
     String name = sysUser.getUsername();
     String log = getAnnotationVal(joinPoint);
     SysLog sysLog = new SysLog();
     sysLog.setIp(ip);
     sysLog.setName(name);
     sysLog.setLog(log);
     sysLog.setLogTime(new Date());
     //插入数据库
     logDao.insertLog(sysLog);
​
​
 }
​
 private String getAnnotationVal(JoinPoint joinPoint) {
     MethodSignature signature = (MethodSignature)joinPoint.getSignature();
     log.info("infosignature:"+signature);
     //获取目标对象
     Method method = signature.getMethod();
     //获取目标方法对象(所有的方法)上面的注解对象
     MyLog myLog = method.getDeclaredAnnotation(MyLog.class);
     String value = myLog.value();
     log.info("value:" + value);
     return value;
 }
}

6.写dao

void insertLog(SysLog sysLog);

7、写sql 

<insert id="insertLog">
    insert into sys_log(log_time, log,ip,name)
    values (#{logTime},#{log},#{ip},#{name})
</insert>

8、前端略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值