审计日志接口
版本记录
版本号 | 日期 | 修改内容 |
---|---|---|
0.12.3 | 2024-08-15 | 修复已知问题 |
审计日志
审计日志写入
接口功能
审计日志写入接口用于记录用户登录、注销、查看、编辑、新增、删除、锁定、解锁、业务审计追溯等操作,将审计日志数据服务收集到的数据信息通过提供 HTTP 格式的接口或者异步中间件消息服务/消息中间件 MQ 方式进行传输,存储到关系库(如 PostgreSQL,可根据时间对日志进行归档操作)中。
存储的字段包括:日志 id、操作模块对应的编码、方法、操作、操作对应菜单关联的 action Id、操作目标对象、对应操作目标数据 id、操作时间、操作人 id、操作人名字、请求信息、应答信息、应答时间、删除标识、日志类型、操作成功与否、扩展字段、创建时间等,其中。扩展字段要求:目前只支持嵌套一层 key-value 形式的 json 对象格式的 String 字符串,并且 key 首字母要求大写。
接口类型
HTTP 接口
接口地址
URL | /v1/audit/log/write |
---|---|
http 请求方式 | post |
请求参数
- 请求参数说明
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
req | List | 是 | 审计日志写入 List 集合 |
AuditLogModel | AuditLogModel | 是 | 审计日志实体类 AuditLogModel |
applicationSource | string | 是 | 应用代码 |
moduleCode | string | 否 | 模块对应编码 |
method | string | 否 | 方法 |
operator | string | 否 | 方法对应操作 |
action | string | 否 | 操作对应菜单关联的 action.id |
actionTarget | string | 否 | 操作目标对象 |
actionData | string | 否 | 追溯编码 |
actionTime | string | 是 | 操作时间(格式:yyyy-MM-dd HH:mm:ss) |
actionUserId | string | 是 | 操作人 Id |
actionUserName | string | 是 | 操作人员 |
requestContent | string | 否 | 日志请求内容 |
responseContent | string | 否 | 日志应答内容 |
workCenter | string | 否 | 工作中心 |
workStation | string | 否 | 工作站 |
operatorPosition | string | 否 | 操作位置 |
role | string | 否 | 角色 |
isDelete | string | 否 | 删除标识 |
logType | string | 是 | 日志类型(1-使用日志;2-访问日志;3-业务审计日志) |
extension | string | 否 | 扩展字段,目前只支持嵌套一层 key-value 形式的 json 对象格式的字符串 |
Authorization | string | 否 | 令牌 |
1. 请求示例
POST /v1/audit/log/write
[
{
"applicationSource": "MES",
"moduleCode": "material",
"method": "Mutation.upsertMaterial",
"operator": "物料保存",
"action": "cjyp6bfyj3js70785p5kjdzg8",
"actionTarget": "Material",
"actionData": "clg64is660inv0823xwwjf00l",
"actionTime": "2023-05-21 10:10:39",
"actionUserId": "1020202338877",
"actionUserName": "zhang",
"requestContent": "{}",
"responseContent": {
"typename": "Material",
"abcCode": "A",
"analysisValidity": 0,
"autoAllcation": true,
"defaultContainerZone": "",
"defaultPalletZone": "",
"materialDesc": "复合膜(xian) -描述",
"weight2": 0,
"weightDefaultMode": "NET",
"weightUnit1": "kg",
"weightingWeightTolerance": 3
}
}
]
执行结果
- 返回值参数说明
参数名称 | 类型 | 描述 |
---|---|---|
code | int | 返回码,0 成功,其他失败 |
message | string | 返回信息描述 |
timestamp | int | 时间戳 |
- 示例说明
// 成功示例
{
"message": "新增成功",
"code": 0,
"timestamp": 1681348294699
}
// 失败示例
{
"message": "新增失败",
"code": -1,
"timestamp": 1681348294699
}
审计日志查询
接口功能
根据条件查询审计日志,其中需要注意的是:主过滤器 expr 中查询的是标准字段,子过滤器 subFilter 中查询的是扩展字段。
接口类型
HTTP 接口
接口地址
URL | /v1/audit/log/find |
---|---|
http 请求方式 | post |
请求参数
- 请求参数说明
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
req | AuditLogReq | 是 | 审计日志查询 |
filters | Object | 否 | 查询过滤器 |
op | string | 否 | 过滤器之间的逻辑运算符 |
expr | List | 否 | 条件表达式集合(针对标准字段查询) |
FilterExprReq | Object | 否 | 过滤器 |
field | string | 否 | 字段名称(标准字段名称) |
operator | String | 否 | 过滤条件 |
value | List | 否 | 查询内容 |
subFilter | List | 否 | 子过滤器(针对扩展字段查询,目前只支持一层) |
field | String | 否 | 子字段名称(扩展字段名称) |
operator | string | 否 | 子过滤条件 |
value | List | 否 | 子查询内容 |
subFilter | List | 否 | 子子过滤器 |
pageable | PageReq | 否 | 分页信息 |
page | Integer(int32) | 否 | 当前页 |
pageSize | Integer(int32) | 否 | 每页数量 |
orderBy | OrderReq | 否 | 排序信息 |
field | Integer(int32) | 否 | 排序字段(只支持按审计日志创建时间 createTime 排序) |
order | Integer(int32) | 否 | 排序方式(排序方式支持 asc/desc 两种) |
Authorization | String | 否 | 令牌 |
1. 请求示例
{
"filters":
{
"op": "or",
"expr": [
{
"field": "logType",
"operator": "=",
"value": ["1"]
},{
"field": "actionUserName",
"operator": "like",
"value": ["%wang%"]
}
],
"subFilter": [
{
"op": "or",
"expr": [
{
"field": "ExtendField2",
"operator": "=",
"value": ["bbb"]
}
],
"subFilter": []
}
]
},
"orderBy": [
{
"field": "createTime",
"order": "desc"
}
],
"pageable": {
"page": 1,
"pageSize": 10
}
}
执行结果
- 返回值参数说明
参数名称 | 类型 | 描述 |
---|---|---|
code | int | 状态码 |
message | string | 提示信息 |
data | List | 返回的结果列表。 |
1. 示例说明
{
"code": 0,
"message": "查询成功",
"timestamp": 1684203668483,
"pageNum": 1,
"pageSize": 10,
"total": 4,
"data": [
{
"action": "cjyp6bfyj3js70785p5kjdzg8",
"actionData": "clg64is660inv0823xwwjf00l",
"actionTarget": "Material",
"actionTime": 1682499147084,
"actionUserId": "1020202338877",
"actionUserName": "wang",
"applicationSource": "MES",
"createTime": 1683775531083,
"extension": "{\"Huahua\":\"eeeeeaaa1234aaaa\",\"Guanjianzi\":\"bbb1234bbbb关键字\"}",
"flag": 0,
"id": "1106180282079555585",
"isDelete": false,
"logType": "1",
"method": "Mutation.upsertMaterial",
"moduleCode": "material",
"operator": "物料保存",
"workCenter":"工作中心",
"workStation":"工作站",
"operatorPosition":"操作位置",
"role":"admin",
"requestContent": "{}",
"responseContent": "{\"defaultPalletZone\":\"\",\"abcCode\":\"A\",\"materialDesc\":\"描述\",\"typename\":\"Material\",\"autoAllcation\":true,\"defaultContainerZone\":\"\",\"weightUnit1\":\"kg\",\"weight2\":0,\"weightDefaultMode\":\"NET\",\"analysisValidity\":0,\"weightingWeightTolerance\":3}"
}
]
}
审计日志对比
接口功能
该接口是审计日志信息新旧数据对比接口,只有使用日志(logType=“1”)和业务审计日志(logType=“3”)才具备该功能,记录数据表的字段变化,主要是对 responseContent 字段中字段名称、变更前后的值对比。 具体接口实现步骤:
- 根据审计日志 id 及日志类型 logType 获取本条审计日志信息;
- 根据上一步审计日志信息获取到日志的追溯编码 actionData(对应操作目标的数据 ID)及日志的操作时间 actionTime,查询获取日志信息等于追溯编码 actionData 且操作时间 actionTime 小于等于 actionTime 的最近两次的日志信息 list 集合数据;
- 遍历上一步获取到的 list 集合数据,得到 responseContent 字段对比结果数据,将对比结果数据放到集合 List<Object>(List[0]当前数据,List[1]上一条数据)中返回。
注意事项:
- 对比结果展示所有字段、变更前后的值还是只展示部分差异字段、变更前后的值,由业务根据自己项目的实际情况决定.
- 操作行为是新增操作时,对比结果 list 集合返回两条数据,其中集合的第一个元素是当前日志信息(新数据),集合的第二个元素为空;操作行为是删除操作时,对比结果 list 集合返回两条数据,其中集合的第一个元素是当前日志信息为空,集合的第二个元素为上一条日志信息。
接口类型
HTTP 接口
接口地址
URL | /v1/audit/log/compare |
---|---|
http 请求方式 | post |
请求参数
- 请求参数说明
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
req | AuditLogReq | 是 | 审计日志信息新旧数据对比 |
logId | string | 是 | 日志 id |
logType | string | 是 | 日志类型 |
Authorization | string | 否 | 令牌 |
- 请求示例
POST /v1/audit/log/compare
{
"logId":"3456123123123123",
"logType":"1"
}
执行结果
- 返回值参数说明
属性名称 | 类型 | 描述 |
---|---|---|
code | int | 返回码,0 成功,其他失败 |
message | string | 返回信息描述 |
timestamp | List | 返回的结果列表,集合的第一个元素是当前日志信息(新数据),集合的第二个元素是上一条日志信息(旧数据) |
1. 示例说明
{
"code": 0,
"message": "查询成功",
"data": [
{
"defaultPalletZone": "",
"abcCode": "A4",
"materialDesc": "复合膜描述",
"typename": "Material",
"autoAllcation": true,
"defaultContainerZone": "",
"weightUnit1": "kg",
"weight2": 0,
"weightDefaultMode": "NET",
"analysisValidity": 0,
"weightingWeightTolerance": 3
},
{
"defaultPalletZone": "",
"abcCode": "A3",
"materialDesc": "复合膜描述",
"typename": "Material",
"autoAllcation": true,
"defaultContainerZone": "",
"weightUnit1": "kg",
"weight2": 0,
"weightDefaultMode": "NET",
"analysisValidity": 0,
"weightingWeightTolerance": 3
}
],
"timestamp": 1684402671000
}
审计日志导出
接口功能
根据查询条件将数据导出到 csv 文件中。
接口类型
HTTP 接口
接口地址
URL | /v1/audit/log/export |
---|---|
http 请求方式 | post |
请求参数
- 请求参数说明
同“审计日志查询”。
1. 请求示例
POST /v1/audit/log/export
{
"filters":
{
"op": "or",
"expr": [
{
"field": "logType",
"operator": "=",
"value": ["1"]
},{
"field": "actionUserName",
"operator": "like",
"value": ["%wang%"]
}
],
"subFilter": [
{
"op": "or",
"expr": [
{
"field": "ExtendField2",
"operator": "=",
"value": ["bbb"]
}
],
"subFilter": []
}
]
},
"orderBy": [
{
"field": "createTime",
"order": "desc"
}
]
}
执行结果
- 返回值参数说明
属性名称 | 类型 | 描述 |
---|---|---|
code | int | 返回码,0 成功,其他失败 |
message | string | 返回信息描述 |
timestamp | int | 时间戳 |
- 示例说明
无