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

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

  • 1.审计功能介绍
  • 2.记录的实体类设计
  • 3.保存审计记录到数据库的工具
  • 4.审计功能实现

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;      //发起请求的用户idprivate String userName;    //发起请求的用户名private String userAccount; //发起请求的账号名private String requestAddr; //请求地址private String realAddr;    //请求真实ipprivate String responseAddr;//响应地址private Long totalTime;     //响应请求的总时长@Temporal(TemporalType.TIMESTAMP)       //这个注解表示要存储到数据库中的时候以"时间戳"的形式存储@CreatedDate                            //JPA 会在 save 到数据库之前自动获取当前时间赋值给该值private Date createTime;    //创建时间@Temporal(TemporalType.TIMESTAMP)@LastModifiedDateprivate Date modifyTime;    //修改时间
}

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

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

#jpa相关配置jpa:generate-ddl: trueopen-in-view: falseshow-sql: true

采用jpa框架的代码

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/230721.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分享10篇优秀论文,涉及图神经网络、大模型优化、表格分析

引言 第38届AAAI人工智能年度会议将于2024年2月在加拿大温哥华举行。今天给大家分享十篇AAAI2024论文,主要涉及图神经网络,大模型幻觉、中文书法文字生成、表格数据分析、KGs错误检测、多模态Prompt、思维图生成等。 论文获取方式,回复&am…

微服务实战系列之Dubbo(下)

前言 眼看着2023即将走远,心里想着似乎还有啥,需要再跟各位盆友叨叨。这不说曹操,曹操就来了。趁着上一篇Dubbo博文的余温尚在,博主兴匆匆地“赶制”了Dubbo的下集,以飨读者。 上一篇博主依然从Dubbo的内核出发&#…

C++第四天

定义一个Person类,私有成员int age,string &name,定义一个Stu类,包含私有成员double *score,写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数,完成对Person的运算符重载(算术运算符、条件运算…

Winform中使用Fleck实现Websocket服务端并读取SQLite数据库中数据定时循环群发消息

场景 Winform中使用Websocket4Net实现Websocket客户端并定时存储接收数据到SQLite中: Winform中使用Websocket4Net实现Websocket客户端并定时存储接收数据到SQLite中-CSDN博客 Winform中操作Sqlite数据增删改查、程序启动时执行创建表初始化操作: Wi…

docker 安装可视化工具 Portainer 以及 汉化

安装portainer是最新版本,汉化指定版本2.9.1 。如果要安装汉化版,可直接跳转步骤四 一、拉去镜像 安装网址:Install Portainer BE with Docker on Linux - Portainer Documentation docker pull portainer/portainer二、根据portainer镜像创建…

利用 PEB_LDR_DATA 结构枚举进程模块信息

1. 引言 我们常常通过很多方法来获取进程的模块信息,例如 EnumProcessModules 函数、CreateToolhelp32Snapshot 函数、WTSEnumerateProcesses 函数、ZwQuerySystemInformation 函数等。但是调用这些接口进行模块枚举的原理是什么我们并不知道。通过学习 PEB 中 PEB…

Prometheus-AlertManager 邮件告警

环境,软件准备 本次演示环境,我是在虚拟机上安装 Linux 系统来执行操作,以下是安装的软件及版本: System: CentOS Linux release 7.6Docker: 24.0.5Prometheus: v2.37.6Consul: 1.6.1 docker 安装prometheus,alertmanage,说明一下这里直接将…

ArrayList学生管理系统

文章目录 1.ArrayList集合和数组的优势对比:1.1 ArrayList类概述1.2 ArrayList类常用方法1.2.1 构造方法1.2.2 成员方法1.2.3 示例代码 1.3 ArrayList存储字符串并遍历1.3.1 案例需求1.3.2 代码实现 1.4 ArrayList存储学生对象并遍历1.4.1 案例需求1.4.2 代码实现 1…

【LLM】大型语言模型综述论文

今天我将与大家分享一篇精彩的论文。这项调查提供了LLM文献的最新综述,这对研究人员和工程师来说都是一个有用的资源。 为什么选择LLM? 当参数尺度超过一定水平时,这些扩展的语言模型不仅实现了显著的性能改进,而且还表现出一些…

uniCloud 云数据库(新建表、增、删、改、查)

新建表结构描述文件 todo 为自定义的表名 表结构描述文件的默认后缀为 .schema.json 设置表的操作权限 uniCloud-aliyun/database/todo.schema.json 默认的操作权限都是 false "permission": {"read": false,"create": false,"update&quo…

【熔断限流组件resilience4j和hystrix】

文章目录 🔊博主介绍🥤本文内容起因resilience4j落地实现pom.xml依赖application.yml配置接口使用 hystrix 落地实现pom.xml依赖启动类上添加注解接口上使用 📢文章总结📥博主目标 🔊博主介绍 🌟我是廖志伟…

华为HCIE-Datacom课程介绍

厦门微思网络HCIE-Datacom课程介绍 一、认证简介 HCIE-Datacom(Huawei Certified ICT Expert-Datacom)认证是华为认证体系中的顶级认证,HCIE-Datacom认证定位具备坚实的企业网络跨场景融合解决方案理论知识,能够使用华为数通产品…

C语言-环境搭建

文章目录 内容Notepad的安装gcc编译工具的配置 编写软件的安装:软件传送门:Notepad软件选择一个合适的路径,一键傻瓜式安装即可 编译工具gcc在windows环境下的配置:解压gcc编辑工具包解压出来的mingw64文件放到一个合适的磁盘路径…

从0到1入门C++编程——03 内存分区、引用、函数高级应用

文章目录 一、内存分区二、引用三、函数的高级应用1.默认参数2.占位参数3.函数重载 一、内存分区 C程序在执行时,会将内存大致分为4个区,分别是代码区、全局区、栈区和堆区。 代码区用来存放函数体和二进制代码,由操作系统进行管理。 全局区…

Kubernetes-网络

一. 前言 flannel两种容器跨主机通信的方案,其中UDP模式是IP in UDP,即三层报文封装在UDP数据包中通信;而vxlan模式则是MAC in UDP,即二层报文封装在UDP数据包中通信 flannel UDP模式和vxlan模式都对数据包做了封解包&#xff0c…

为什么我不建议大学生接公司单?

大家好,我是鱼皮。前两天,我 编程导航 的鱼友提了个问:大学生怎么接公司的单赚点零花钱? 然后我很认真地评论了一句:我不建议大学生接公司单。 这位小伙伴很认真,又通过微信单独问我: 想了想&am…

Mybatis行为配置之Ⅰ—缓存

专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 再谈动态SQL Mybatis配置入门 Mybatis行为配置之Ⅰ—缓存 Mybatis行为配置…

【Midjourney】AI绘画新手教程(一)登录和创建服务器,生成第一幅画作

一、登录Discord 1、访问Discord官网 使用柯學尚网(亲测非必须,可加快响应速度)访问Discord官方网址:https://discord.com 选择“在您的浏览器中打开Discord” 然后,注册帐号、购买套餐等,在此不做缀述。…

3D目标检测(教程+代码)

随着计算机视觉技术的不断发展,3D目标检测成为了一个备受关注的研究领域。与传统的2D目标检测相比,3D目标检测可以在三维空间中对物体进行定位和识别,具有更高的准确性和适用性。本文将介绍3D目标检测的相关概念、方法和代码实现。 一、3D目…

Python消消乐小游戏(PyGame)

文章目录 写在前面喜羊羊与灰太狼PyGame入门消消乐注意事项写在后面 写在前面 本期内容:基于pygame实现喜羊羊与灰太狼版消消乐小游戏 实验环境 python3.11及以上pycharmpygame 安装pygame的命令: pip install -i https://pypi.tuna.tsinghua.edu.c…