SpringCloud微服务安全之API审计日志功能实现
2023-12-28 14:43:36
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
文章来源:https://blog.csdn.net/weixin_44330367/article/details/135267245
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!