SpringCloud微服务安全之API审计日志功能实现

1.审计功能介绍

在这里插入图片描述
审计日志

  • 定义:谁,在什么时间,干了什么事。
  • 位置:认证之后,授权之前。这样就知道是谁在访问,拒绝掉的访问也能被记录。如果放在认证之前,那么就不知道是谁在访问;如果放在授权之后,就没办法记录被拒绝的访问。
  • 存储:审计日志一定要持久化,记在数据库里或者是文件,放在内存会丢失。
  • 怎么记:请求进来的时候记录一次,请求出去的时候,更新日志。如果只在请求进来的时候记,那么请求的成功与否是不知道的。如果只在请求返回的时候记,那么如果一个请求把你的系统搞挂了,也没有记,是不知道谁搞挂的。
  • 技术选择:过滤器 、拦截器 、ControllerAdvice 、 AOP。过滤器不好分辨是请求过来执行的还是请求出去执行的; ControllerAdvice-做全局异常处理 ;AOP 将代码分散到多个地方,导致跟踪和调试变得更加复杂;拦截器在过滤器之后执行即可。
    在这里插入图片描述

2.记录的实体类设计

具体字段可以自行设计,持久层框架可以用MyBatis或者jpa(这里用的jpa)

import lombok.Data;
import nonapi.io.github.classgraph.json.Id;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;

@Entity
@Data
@EntityListeners(AuditingEntityListener.class)  //加一个监听器,后面的@CreateDate等注解才能监听得到当前时间
public class AuditLog implements Serializable {
   
   
    @javax.persistence.Id
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String method;      //请求方式
    private String path;        //请求路径
    private String notes;       //请求注释
    private String parameters;  //请求参数列表
    private Integer status;     //http返回的状态码
    private String outPut;      //响应内容
    private String userId;      //发起请求的用户id
    private String userName;    //发起请求的用户名
    private String userAccount; //发起请求的账号名
    private String requestAddr; //请求地址
    private String realAddr;    //请求真实ip
    private String responseAddr;//响应地址
    private Long totalTime;     //响应请求的总时长
    @Temporal(TemporalType.TIMESTAMP)       //这个注解表示要存储到数据库中的时候以"时间戳"的形式存储
    @CreatedDate                            //JPA 会在 save 到数据库之前自动获取当前时间赋值给该值
    private Date createTime;    //创建时间
    @Temporal(TemporalType.TIMESTAMP)
    @LastModifiedDate
    private Date modifyTime;    //修改时间
}

3.保存审计记录到数据库的工具

在application.yml配置文件中添加jpa配置

#jpa相关配置
  jpa:
    generate-ddl: true
    open-in-view: false
    show-sql: true

采用jpa框架的代码

import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.CrudRepository;

publi

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-28 17:02:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-28 17:02:01       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-28 17:02:01       82 阅读
  4. Python语言-面向对象

    2023-12-28 17:02:01       91 阅读

热门阅读

  1. centos 扩充swap分区

    2023-12-28 17:02:01       56 阅读
  2. CentOS上安装MySQL 8.0的详细教程

    2023-12-28 17:02:01       57 阅读
  3. centos 安装 配置 zsh

    2023-12-28 17:02:01       71 阅读
  4. mysql-5.6.16的内存泄漏问题

    2023-12-28 17:02:01       61 阅读
  5. CMSIS-RTOS2 函数

    2023-12-28 17:02:01       55 阅读
  6. 复试 || 就业day01(2023.12.27)算法篇

    2023-12-28 17:02:01       45 阅读
  7. Linux telnet命令

    2023-12-28 17:02:01       49 阅读
  8. ROS2 相对于 ROS1 做了哪些改动、有什么不同点

    2023-12-28 17:02:01       45 阅读
  9. k8s 的YAML文件详解

    2023-12-28 17:02:01       49 阅读
  10. TCP与UDP是流式传输协议吗?

    2023-12-28 17:02:01       52 阅读