Appearance
审计日志模块 ¶
TIP
如果审计要启用归属地的配置,需要引入ip2region
依赖,具体可以见 IP归属地模块
功能 ¶
- 记录登录日志
- 记录各类操作日志
- IP归属地信息查询
- 数据版本记录,并可以针对不同版本进行对比
- 支持
DB
和MongoDB
两种存储方式
使用说明 ¶
登录日志 ¶
在进行登录操作时,无论成功还是成功,都会记录相关的登录信息,具体信息如下:
java
@Data
@Accessors(chain = true)
public class LoginLogParam {
/** 用户账号id */
private Long userId;
/** 用户名称 */
private String account;
/** 登录成功状态*/
private Boolean login;
/** 登录终端 */
private String client;
/** 登录IP地址 */
private String ip;
/** 登录地点 */
private String loginLocation;
/** 浏览器类型 */
private String browser;
/** 操作系统 */
private String os;
/** 提示消息 */
private String msg;
/** 访问时间 */
private LocalDateTime loginTime;
}
操作日志 ¶
通过对
OperateLog
注解编写对应的操作日志切面,可以对添加OperateLog
的方法进行拦截并记录操作日志,一个方法上可以添加多个OperateLog
注解。
使用说明:
java
@OperateLog(title = "重置密码",businessType= BusinessType.UPDATE, saveParam = true)
@PostMapping("/restartPassword")
public ResResult<Void> restartPassword(Long userId,@NotBlank(message = "新密码不能为空") String newPassword){
userAdminService.restartPassword(userId,newPassword);
return Res.ok();
}
注解参数说明 audit-log
模块
title
:模块名称businessType
:业务操作类型,默认为OTHERsaveParam
:是否保存参数值,默认不保存saverReturn
:是否保存返回结果,默认不保存
业务操作类型
java
/**
* 业务操作类型
*/
public enum BusinessType {
/** 其它 */
OTHER,
/** 新增 */
INSERT,
/** 修改 */
UPDATE,
/** 删除 */
DELETE,
/** 授权 */
GRANT,
/** 导出 */
EXPORT,
/** 导入 */
IMPORT,
/** 强退 */
FORCE,
/** 清空数据 */
CLEAN,
}
保存信息内容
java
@Data
@Accessors(chain = true)
public class OperateLogParam {
/** 操作模块 */
private String title;
/** 操作人员id */
private Long operateId;
/** 操作人员账号 */
private String username;
/** 业务类型 */
private String businessType;
/** 请求方法 */
private String method;
/** 请求方式 */
private String requestMethod;
/** 请求url */
private String operateUrl;
/** 操作ip */
private String operateIp;
/** 操作地点 */
private String operateLocation;
/** 请求参数 */
private String operateParam;
/** 返回参数 */
private String operateReturn;
/** 操作状态(0正常 1异常) */
private Boolean success;
/** 错误消息 */
private String errorMsg;
/** 操作时间 */
private LocalDateTime operateTime;
}
数据版本记录 ¶
添加到要记录版本数据的数据库实体类上,在进行增删改操作的时候,会自动记录对应的数据版本
注解参数说明 ¶
@DataVersionLog
title
数据记录的标题
保存的信息内容
java
@Data
@Accessors(chain = true)
@Schema(title = "数据版本日志")
public class DataVersionLogDto {
@Schema(description = "主键")
private Long id;
@Schema(description = "表名称")
private String tableName;
@Schema(description = "数据名称")
private String dataName;
@Schema(description = "数据主键")
private String dataId;
@Schema(description = "数据内容")
private String dataContent;
@Schema(description = "数据版本")
private Integer version;
@Schema(description = "创建者ID")
private Long creator;
@Schema(description = "创建时间")
private LocalDateTime createTime;
}
手动记录 ¶
java
@Tag(name = "测试日志")
@RestController
@RequestMapping("/")
@RequiredArgsConstructor
public class TestLogController {
private final DataVersionLogService dataVersionLogService;
@Operation(summary = "测试数据版本日志")
@PostMapping("/testDataVersion")
public ResResult<Void> testDataVersion(String msg){
Client client = new Client();
client.setName(msg);
client.setId(1L);
client.setCreateTime(LocalDateTime.now());
dataVersionLogService.add(new DataVersionLogParam().setDataId(String.valueOf(client.getId())).setDataName("client").setDataContent(client));
return Res.ok();
}
}
参数配置 ¶
yaml
bootx:
starter:
audit-log:
# 存储方式 jdbc/Mongo
store: mongo
# ip归属地功能 隶属于审计模块
ip2region:
# 数据文件路径
file-path: \data\ip2region\ip2region.xdb
# 查询方式
search-type: cache
关键类 ¶
OperateLogAspectHandler
操作日志切面处理类LoginLogService
登陆日志处理接口OperateLogService
操作日志处理接口LoginLogParam
要保存的登录日志信息OperateLogParam
要保存的操作日志信息IpToRegionService
IP归属地信息服务类
扩展新的存储方式 ¶
- 继承
LoginLogService
/OperateLogService
接口,实现对应方法,并设置该实现类Bean的生效方式
java
@Slf4j
@Service
@ConditionalOnProperty(
prefix = "bootx.starter.audit-log",
value = "store",
// 设置自己的存储方式名称
havingValue = "Es",
matchIfMissing = true)
@RequiredArgsConstructor
public class OperateLogEsService implements Operatee {
}
- 通常要编写
LoginLogParam
、OperateLogParam
对应的数据库持久化类,同时提供持久化类转换为LoginLogDto
/OperateLogDto
的方式,*LogServic
接口中有几个方法返回值就是上面两个Dto对象 - 在配置文件中配置存储方式
yaml
bootx:
starter:
audit-log:
# 填写自己扩展的存储方式
store: mongo