Day13-作业(SpringBootWeb AOP)

作业1:基于springAOP技术完成如下需求。

需求:

记录当前 tlias 智能学习辅助系统中所有员工的登录操作,无论登录成功还是失败,都需要记录日志。日志信息包含如下信息:

  • 用户名 (登录时,输入的用户名)

  • 密码 (登录时,输入的密码)

  • 操作时间 (什么时间,员工登录的)

  • 登录是否成功

  • 登录成功后,下发的jwt令牌

  • 登录操作耗时

提示:

  • 获取到原始方法运行的参数,也是可以根据实际情况强转的。 比如:

//获取方法参数
Object[] args = proceedingJoinPoint.getArgs();
Emp emp = (Emp)args[0];
  • 原始方法运行的结果虽然是Object,但是我们可以根据实际切入点表达式匹配的方法, 根据情况来进行强转的 ,比如:

//调用原始方法
Object obj = proceedingJoinPoint.proceed();


//获取登录结果,是否成功
Result result = (Result) obj;

表结构:

在tlias系统的数据库 tlias 中,创建如下表结构。

-- 登录日志表
create table emp_login_log(
    id int unsigned primary key auto_increment comment 'ID',
    username varchar(20) comment '用户名',
    password varchar(32) comment '密码',
    login_time datetime comment '登录时间',
    is_success tinyint unsigned comment '是否成功, 1:成功, 0:失败',
    jwt varchar(1000) comment 'JWT令牌',
    cost_time bigint unsigned comment '耗时, 单位:ms'
) comment '登录日志表';

实体类:

package com.itheima.pojo;

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

import java.time.LocalDateTime;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class EmpLoginLog {
    private Integer id; //ID
    private String username; //登录用户名
    private String password; //登录密码
    private LocalDateTime loginTime; //登录时间
    private Short isSuccess; //是否登录成功, 1:成功, 0:失败
    private String jwt; //成功后, 下发的JWT令牌
    private Long costTime; //登录耗时, 单位:ms
}

最终,员工在登录页面执行登录操作,输入的信息,登录成功还是失败,如果成功了,下发的jwt令牌是什么,全部都需要记录到数据库表中。 最终表中存储的数据样例如下:


作业2:基于springAOP技术完成如下需求。

需求:

记录当前tlias智能学习辅助系统中文件上传操作的日志。日志信息包含如下信息:

  • 原始文件名

  • 文件大小,单位:字节

  • 文件拓展名, 如:.jpg

  • 文件上传时间

  • 阿里云OSS中文件访问的url

表结构:

在tlias系统的数据库 tlias 中,创建如下表结构。

-- 文件上传日志表
create table file_upload_log(
    id int unsigned primary key auto_increment comment 'ID',
    filename varchar(100) comment '原始文件名',
    size bigint comment '文件大小, 单位:字节',
    extname varchar(10) comment '文件后缀名,如:.jpg',
    url varchar(300) comment '阿里云OSS访问url',
    upload_time datetime comment '上传时间'
) comment '文件上传日志表';

实体类:

package com.itheima.pojo;

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

import java.time.LocalDateTime;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class FileUploadLog {
    private Integer id; //ID
    private String filename; //原始文件名
    private Long size; //文件大小, 单位:字节
    private String extname; //文件拓展名, 如:.jpg
    private String url; //阿里云OSS文件url
    private LocalDateTime uploadTime; //文件上传时间
}

最终,员工在进行文件上传操作时,需要记录文件的详细信息到 file_upload_log 表中 。 最终表中存储的数据样例如下:


作业3【CRM系统】:优化作业1,将作业1中记录日志的操作,实现异步记录日志

思路:

思路提示:

  1. 创建线程池
  2. 从线程池中获取线程,执行记录日志的操作

(参考)


 作业4【苍穹外卖】:基于springAOP技术完成如下需求。

需求:

优化当前tlias智能学习辅助系统中员工模块:

  • 添加员工业务  方法,抽取公共代码到AOP中,进行统一的配置

    • createTime

    • updateTime

提示:

  1. 对持久层方法进行增强

  2. 给实体