审计日志
审计日志处理的位置是在认证时候授权之前,认证之后记请求谁发出来的,授权之前那些被拒绝的请求可以被记载下来,日志需持久化,在实际开发中将日志发到统一的日志服务
解决流控、认证执行顺序问题
使用注解@Order来解决
使用spring拦截器来记录审计日志,其他还有Filter、ControllerAdvice、AOP的关系
spring调用顺序依次是filter(不是spring定义的,web规范里面定义的)->interceptor->controller advice(全局异常处理)->AOP
实例代码
编写audit_log实体
@Data
@Entity
@EntityListeners(AuditingEntityListener.class)
public class AuditLog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String method;
private String path;
private Integer status;
@CreatedBy
@LastModifiedBy
private String username;
@Temporal(TemporalType.TIMESTAMP)
@CreatedDate
private Date createTime;
@Temporal(TemporalType.TIMESTAMP)
@LastModifiedDate
private Date updateTime;
}
注:时间使用@Temporal注解,并存储成时间戳
@CreatedDate、@LastModifiedDate,这两个注解用jpa去save的时候判断是创建时间还是更新时间并自动填充到库里面
开启jpa支持审计的功能,实体类auditlog增加一个监听器@EntityListeners实现的类是AuditingEntityListener,在增加一个@EnableJpaAuditing总开关,@CreatedBy这个注解是创建人是谁,@LastModifiedBy最后修改人是谁,单写这个注解不生效要想使之生效需要实现一个接口AuditorAware,是一个范型,返回一个String,当jps碰到@CreatedBy这个注解