⚡ 添加执行人.
This commit is contained in:
@@ -1,18 +1,18 @@
|
||||
spring:
|
||||
datasource:
|
||||
druid:
|
||||
url: jdbc:mysql://127.0.0.1:3306/orion_visor?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai&autoReconnect=true
|
||||
url: jdbc:mysql://116.62.194.246:3306/orion_visor?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai&autoReconnect=true
|
||||
username: root
|
||||
password: Data@123456
|
||||
password: Orionsec@123456
|
||||
initial-size: 0
|
||||
min-idle: 1
|
||||
max-active: 5
|
||||
stat-view-servlet:
|
||||
enabled: false
|
||||
redis:
|
||||
host: 127.0.0.1
|
||||
host: 116.62.194.246
|
||||
port: 6379
|
||||
password: Data@123456
|
||||
password: Orionsec@123456
|
||||
redisson:
|
||||
threads: 2
|
||||
netty-threads: 2
|
||||
|
||||
@@ -107,6 +107,15 @@ public class ExecJobController {
|
||||
return execJobService.getExecJobPage(request);
|
||||
}
|
||||
|
||||
@DemoDisableApi
|
||||
@OperatorLog(ExecJobOperatorType.SET_EXEC_USER)
|
||||
@PutMapping("/set-exec-user")
|
||||
@Operation(summary = "设置计划任务执行用户")
|
||||
@PreAuthorize("@ss.hasPermission('exec:exec-job:set-exec-user')")
|
||||
public Integer setExecJobExecUser(@Validated @RequestBody ExecJobSetExecUserRequest request) {
|
||||
return execJobService.setExecJobExecUser(request);
|
||||
}
|
||||
|
||||
@DemoDisableApi
|
||||
@OperatorLog(ExecJobOperatorType.DELETE)
|
||||
@DeleteMapping("/delete")
|
||||
|
||||
@@ -16,10 +16,11 @@
|
||||
package org.dromara.visor.module.asset.define.operator;
|
||||
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.*;
|
||||
|
||||
/**
|
||||
* 批量执行日志 操作记录类型
|
||||
*
|
||||
@@ -45,12 +46,12 @@ public class ExecCommandLogOperatorType extends InitializingOperatorTypes {
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE, "删除批量执行日志 <sb>${count}</sb> 条"),
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE_HOST, "删除批量执行主机日志 <sb>${logId}</sb> <sb>${hostName}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, CLEAR, "清理批量执行日志 <sb>${count}</sb> 条"),
|
||||
new OperatorType(OperatorRiskLevel.L, DOWNLOAD, "下载批量执行日志 <sb>${logId}</sb> <sb>${hostName}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, INTERRUPT, "中断批量执行命令"),
|
||||
new OperatorType(OperatorRiskLevel.M, INTERRUPT_HOST, "中断批量执行主机命令 <sb>${logId}</sb> <sb>${hostName}</sb>"),
|
||||
new OperatorType(H, DELETE, "删除批量执行日志 <sb>${count}</sb> 条"),
|
||||
new OperatorType(H, DELETE_HOST, "删除批量执行主机日志 <sb>${logId}</sb> <sb>${hostName}</sb>"),
|
||||
new OperatorType(H, CLEAR, "清理批量执行日志 <sb>${count}</sb> 条"),
|
||||
new OperatorType(L, DOWNLOAD, "下载批量执行日志 <sb>${logId}</sb> <sb>${hostName}</sb>"),
|
||||
new OperatorType(M, INTERRUPT, "中断批量执行命令"),
|
||||
new OperatorType(M, INTERRUPT_HOST, "中断批量执行主机命令 <sb>${logId}</sb> <sb>${hostName}</sb>"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,11 @@
|
||||
package org.dromara.visor.module.asset.define.operator;
|
||||
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.M;
|
||||
|
||||
/**
|
||||
* 批量执行 操作记录类型
|
||||
*
|
||||
@@ -35,7 +36,7 @@ public class ExecCommandOperatorType extends InitializingOperatorTypes {
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.M, EXEC, "执行主机命令"),
|
||||
new OperatorType(M, EXEC, "执行主机命令"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,11 @@
|
||||
package org.dromara.visor.module.asset.define.operator;
|
||||
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.*;
|
||||
|
||||
/**
|
||||
* 计划任务执行日志 操作记录类型
|
||||
*
|
||||
@@ -45,12 +46,12 @@ public class ExecJobLogOperatorType extends InitializingOperatorTypes {
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE, "删除计划任务执行日志 <sb>${count}</sb> 条"),
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE_HOST, "删除计划任务执行主机日志 <sb>${logId}</sb> <sb>${hostName}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, CLEAR, "清理计划任务执行日志 <sb>${count}</sb> 条"),
|
||||
new OperatorType(OperatorRiskLevel.L, DOWNLOAD, "下载计划任务执行日志 <sb>${logId}</sb> <sb>${hostName}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, INTERRUPT, "中断计划任务执行命令"),
|
||||
new OperatorType(OperatorRiskLevel.M, INTERRUPT_HOST, "中断计划任务执行主机命令 <sb>${logId}</sb> <sb>${hostName}</sb>"),
|
||||
new OperatorType(H, DELETE, "删除计划任务执行日志 <sb>${count}</sb> 条"),
|
||||
new OperatorType(H, DELETE_HOST, "删除计划任务执行主机日志 <sb>${logId}</sb> <sb>${hostName}</sb>"),
|
||||
new OperatorType(H, CLEAR, "清理计划任务执行日志 <sb>${count}</sb> 条"),
|
||||
new OperatorType(L, DOWNLOAD, "下载计划任务执行日志 <sb>${logId}</sb> <sb>${hostName}</sb>"),
|
||||
new OperatorType(M, INTERRUPT, "中断计划任务执行命令"),
|
||||
new OperatorType(M, INTERRUPT_HOST, "中断计划任务执行主机命令 <sb>${logId}</sb> <sb>${hostName}</sb>"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,11 @@
|
||||
package org.dromara.visor.module.asset.define.operator;
|
||||
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.*;
|
||||
|
||||
/**
|
||||
* 计划任务 操作日志类型
|
||||
*
|
||||
@@ -27,7 +28,7 @@ import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
* @version 1.0.3
|
||||
* @since 2024-3-28 12:03
|
||||
*/
|
||||
@Module("asset:exec-job")
|
||||
@Module("exec:exec-job")
|
||||
public class ExecJobOperatorType extends InitializingOperatorTypes {
|
||||
|
||||
public static final String CREATE = "exec-job:create";
|
||||
@@ -38,16 +39,25 @@ public class ExecJobOperatorType extends InitializingOperatorTypes {
|
||||
|
||||
public static final String TRIGGER = "exec-job:trigger";
|
||||
|
||||
public static final String SET_EXEC_USER = "exec-job:set-exec-user";
|
||||
|
||||
public static final String DELETE = "exec-job:delete";
|
||||
|
||||
public static final String IMPORT = "exec-job:import";
|
||||
|
||||
public static final String EXPORT = "exec-job:export";
|
||||
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.L, CREATE, "创建计划任务 <sb>${name}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, UPDATE, "更新计划任务 <sb>${before}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, UPDATE_STATUS, "<sb>${statusName}</sb> 计划任务 <sb>${name}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, TRIGGER, "手动触发计划任务 <sb>${name}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE, "删除计划任务 <sb>${name}</sb>"),
|
||||
new OperatorType(L, CREATE, "创建计划任务 <sb>${name}</sb>"),
|
||||
new OperatorType(M, UPDATE, "更新计划任务 <sb>${before}</sb>"),
|
||||
new OperatorType(M, UPDATE_STATUS, "<sb>${statusName}</sb> 计划任务 <sb>${name}</sb>"),
|
||||
new OperatorType(M, TRIGGER, "手动触发计划任务 <sb>${name}</sb>"),
|
||||
new OperatorType(M, SET_EXEC_USER, "修改计划任务 <sb>${name}</sb> 执行用户为 <sb>${username}</sb>"),
|
||||
new OperatorType(H, DELETE, "删除计划任务 <sb>${name}</sb>"),
|
||||
new OperatorType(H, IMPORT, "导入计划任务 <sb>${count}</sb> 条"),
|
||||
new OperatorType(H, EXPORT, "导出计划任务 <sb>${count}</sb> 条"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,11 @@
|
||||
package org.dromara.visor.module.asset.define.operator;
|
||||
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.*;
|
||||
|
||||
/**
|
||||
* 执行模板 操作日志类型
|
||||
*
|
||||
@@ -39,9 +40,9 @@ public class ExecTemplateOperatorType extends InitializingOperatorTypes {
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.L, CREATE, "创建执行模板 <sb>${name}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, UPDATE, "更新执行模板 <sb>${name}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE, "删除执行模板 <sb>${name}</sb>"),
|
||||
new OperatorType(L, CREATE, "创建执行模板 <sb>${name}</sb>"),
|
||||
new OperatorType(M, UPDATE, "更新执行模板 <sb>${name}</sb>"),
|
||||
new OperatorType(H, DELETE, "删除执行模板 <sb>${name}</sb>"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,11 @@
|
||||
package org.dromara.visor.module.asset.define.operator;
|
||||
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.*;
|
||||
|
||||
/**
|
||||
* 主机分组 操作日志类型
|
||||
*
|
||||
@@ -45,12 +46,12 @@ public class HostGroupOperatorType extends InitializingOperatorTypes {
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.L, CREATE, "创建主机分组 <sb>${name}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.L, RENAME, "重命名主机分组 <sb>${before}</sb> -> <sb>${name}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.L, MOVE, "移动主机分组 <sb>${source}</sb> 到 <sb>${target}(${position})</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE, "删除主机分组 <sb>${groupName}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, UPDATE_REL, "修改分组内主机 <sb>${groupName}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, GRANT, "将主机分组权限授予 <sb>${grantType}</sb> <sb>${grantName}</sb>"),
|
||||
new OperatorType(L, CREATE, "创建主机分组 <sb>${name}</sb>"),
|
||||
new OperatorType(L, RENAME, "重命名主机分组 <sb>${before}</sb> -> <sb>${name}</sb>"),
|
||||
new OperatorType(L, MOVE, "移动主机分组 <sb>${source}</sb> 到 <sb>${target}(${position})</sb>"),
|
||||
new OperatorType(H, DELETE, "删除主机分组 <sb>${groupName}</sb>"),
|
||||
new OperatorType(M, UPDATE_REL, "修改分组内主机 <sb>${groupName}</sb>"),
|
||||
new OperatorType(H, GRANT, "将主机分组权限授予 <sb>${grantType}</sb> <sb>${grantName}</sb>"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,12 @@
|
||||
package org.dromara.visor.module.asset.define.operator;
|
||||
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.H;
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.L;
|
||||
|
||||
/**
|
||||
* 主机身份 操作日志类型
|
||||
*
|
||||
@@ -41,10 +43,10 @@ public class HostIdentityOperatorType extends InitializingOperatorTypes {
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.L, CREATE, "创建主机身份 <sb>${name}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.L, UPDATE, "修改主机身份 <sb>${name}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE, "删除主机身份 <sb>${name}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, GRANT, "将主机身份权限授予 <sb>${grantType}</sb> <sb>${grantName}</sb>"),
|
||||
new OperatorType(L, CREATE, "创建主机身份 <sb>${name}</sb>"),
|
||||
new OperatorType(L, UPDATE, "修改主机身份 <sb>${name}</sb>"),
|
||||
new OperatorType(H, DELETE, "删除主机身份 <sb>${name}</sb>"),
|
||||
new OperatorType(H, GRANT, "将主机身份权限授予 <sb>${grantType}</sb> <sb>${grantName}</sb>"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,12 @@
|
||||
package org.dromara.visor.module.asset.define.operator;
|
||||
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.H;
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.L;
|
||||
|
||||
/**
|
||||
* 主机密钥 操作日志类型
|
||||
*
|
||||
@@ -41,10 +43,10 @@ public class HostKeyOperatorType extends InitializingOperatorTypes {
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.L, CREATE, "创建主机密钥 <sb>${name}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.L, UPDATE, "修改主机密钥 <sb>${name}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE, "删除主机密钥 <sb>${name}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, GRANT, "将主机密钥权限授予 <sb>${grantType}</sb> <sb>${grantName}</sb>"),
|
||||
new OperatorType(L, CREATE, "创建主机密钥 <sb>${name}</sb>"),
|
||||
new OperatorType(L, UPDATE, "修改主机密钥 <sb>${name}</sb>"),
|
||||
new OperatorType(H, DELETE, "删除主机密钥 <sb>${name}</sb>"),
|
||||
new OperatorType(H, GRANT, "将主机密钥权限授予 <sb>${grantType}</sb> <sb>${grantName}</sb>"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,11 @@
|
||||
package org.dromara.visor.module.asset.define.operator;
|
||||
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.*;
|
||||
|
||||
/**
|
||||
* 主机 操作日志类型
|
||||
*
|
||||
@@ -43,11 +44,11 @@ public class HostOperatorType extends InitializingOperatorTypes {
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.L, CREATE, "创建主机 <sb>${name}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.L, UPDATE, "修改主机 <sb>${name}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE, "删除主机 <sb>${count}</sb> 条"),
|
||||
new OperatorType(OperatorRiskLevel.M, UPDATE_STATUS, "修改主机状态 <sb>${name}</sb> - <sb>${status}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, UPDATE_CONFIG, "修改主机配置 <sb>${name}</sb>"),
|
||||
new OperatorType(L, CREATE, "创建主机 <sb>${name}</sb>"),
|
||||
new OperatorType(L, UPDATE, "修改主机 <sb>${name}</sb>"),
|
||||
new OperatorType(H, DELETE, "删除主机 <sb>${count}</sb> 条"),
|
||||
new OperatorType(M, UPDATE_STATUS, "修改主机状态 <sb>${name}</sb> - <sb>${status}</sb>"),
|
||||
new OperatorType(M, UPDATE_CONFIG, "修改主机配置 <sb>${name}</sb>"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,12 @@
|
||||
package org.dromara.visor.module.asset.define.operator;
|
||||
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.H;
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.M;
|
||||
|
||||
/**
|
||||
* 终端连接日志 操作日志类型
|
||||
*
|
||||
@@ -39,9 +41,9 @@ public class TerminalConnectLogOperatorType extends InitializingOperatorTypes {
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE, "删除终端连接记录 <sb>${count}</sb> 条"),
|
||||
new OperatorType(OperatorRiskLevel.H, CLEAR, "清空终端连接记录 <sb>${count}</sb> 条"),
|
||||
new OperatorType(OperatorRiskLevel.M, FORCE_OFFLINE, "强制下线终端连接 <sb>${hostName}</sb>"),
|
||||
new OperatorType(H, DELETE, "删除终端连接记录 <sb>${count}</sb> 条"),
|
||||
new OperatorType(H, CLEAR, "清空终端连接记录 <sb>${count}</sb> 条"),
|
||||
new OperatorType(M, FORCE_OFFLINE, "强制下线终端连接 <sb>${hostName}</sb>"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -17,12 +17,13 @@ package org.dromara.visor.module.asset.define.operator;
|
||||
|
||||
import cn.orionsec.kit.lang.utils.collect.Lists;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.*;
|
||||
|
||||
/**
|
||||
* 终端 操作日志类型
|
||||
*
|
||||
@@ -70,17 +71,17 @@ public class TerminalOperatorType extends InitializingOperatorTypes {
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.L, CONNECT, "连接主机 ${connectType} <sb>${hostName}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE_SFTP_LOG, "删除 SFTP 操作日志 <sb>${count}</sb> 条"),
|
||||
new OperatorType(OperatorRiskLevel.L, SFTP_MKDIR, "创建文件夹 ${hostName} <sb>${path}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.L, SFTP_TOUCH, "创建文件 ${hostName} <sb>${path}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, SFTP_MOVE, "移动文件 ${hostName} <sb>${path}</sb> 至 <sb>${target}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, SFTP_REMOVE, "删除文件 ${hostName} <sb>${path}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, SFTP_TRUNCATE, "截断文件 ${hostName} <sb>${path}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, SFTP_CHMOD, "文件提权 ${hostName} <sb>${path}</sb> <sb>${mod}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, SFTP_SET_CONTENT, "修改文件内容 ${hostName} <sb>${path}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, SFTP_UPLOAD, "上传文件 ${hostName} <sb>${path}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, SFTP_DOWNLOAD, "下载文件 ${hostName} <sb>${path}</sb>"),
|
||||
new OperatorType(L, CONNECT, "连接主机 ${connectType} <sb>${hostName}</sb>"),
|
||||
new OperatorType(H, DELETE_SFTP_LOG, "删除 SFTP 操作日志 <sb>${count}</sb> 条"),
|
||||
new OperatorType(L, SFTP_MKDIR, "创建文件夹 ${hostName} <sb>${path}</sb>"),
|
||||
new OperatorType(L, SFTP_TOUCH, "创建文件 ${hostName} <sb>${path}</sb>"),
|
||||
new OperatorType(M, SFTP_MOVE, "移动文件 ${hostName} <sb>${path}</sb> 至 <sb>${target}</sb>"),
|
||||
new OperatorType(H, SFTP_REMOVE, "删除文件 ${hostName} <sb>${path}</sb>"),
|
||||
new OperatorType(H, SFTP_TRUNCATE, "截断文件 ${hostName} <sb>${path}</sb>"),
|
||||
new OperatorType(M, SFTP_CHMOD, "文件提权 ${hostName} <sb>${path}</sb> <sb>${mod}</sb>"),
|
||||
new OperatorType(M, SFTP_SET_CONTENT, "修改文件内容 ${hostName} <sb>${path}</sb>"),
|
||||
new OperatorType(M, SFTP_UPLOAD, "上传文件 ${hostName} <sb>${path}</sb>"),
|
||||
new OperatorType(M, SFTP_DOWNLOAD, "下载文件 ${hostName} <sb>${path}</sb>"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,12 @@
|
||||
package org.dromara.visor.module.asset.define.operator;
|
||||
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.H;
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.M;
|
||||
|
||||
/**
|
||||
* 上传任务 操作日志类型
|
||||
*
|
||||
@@ -41,10 +43,10 @@ public class UploadTaskOperatorType extends InitializingOperatorTypes {
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.M, UPLOAD, "批量上传文件 <sb>${count}</sb> 个 (${name})"),
|
||||
new OperatorType(OperatorRiskLevel.M, CANCEL, "取消上传文件 <sb>${name}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE, "删除上传记录 <sb>${count}</sb>条"),
|
||||
new OperatorType(OperatorRiskLevel.H, CLEAR, "清理上传记录 <sb>${count}</sb>条"),
|
||||
new OperatorType(M, UPLOAD, "批量上传文件 <sb>${count}</sb> 个 (${name})"),
|
||||
new OperatorType(M, CANCEL, "取消上传文件 <sb>${name}</sb>"),
|
||||
new OperatorType(H, DELETE, "删除上传记录 <sb>${count}</sb>条"),
|
||||
new OperatorType(H, CLEAR, "清理上传记录 <sb>${count}</sb>条"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -81,4 +81,12 @@ public class ExecJobDO extends BaseDO {
|
||||
@TableField("recent_log_id")
|
||||
private Long recentLogId;
|
||||
|
||||
@Schema(description = "执行用户id")
|
||||
@TableField("exec_user_id")
|
||||
private Long execUserId;
|
||||
|
||||
@Schema(description = "执行用户名")
|
||||
@TableField("exec_username")
|
||||
private String execUsername;
|
||||
|
||||
}
|
||||
|
||||
@@ -63,6 +63,10 @@ public class ExecLogDO extends BaseDO {
|
||||
@TableField("source_id")
|
||||
private Long sourceId;
|
||||
|
||||
@Schema(description = "执行方式")
|
||||
@TableField("exec_mode")
|
||||
private String execMode;
|
||||
|
||||
@Schema(description = "执行描述")
|
||||
@TableField("description")
|
||||
private String description;
|
||||
|
||||
@@ -49,6 +49,9 @@ public class ExecCommandExecDTO {
|
||||
@Schema(description = "来源id")
|
||||
private Long sourceId;
|
||||
|
||||
@Schema(description = "执行方式")
|
||||
private String execMode;
|
||||
|
||||
@Schema(description = "执行序列")
|
||||
private Integer execSeq;
|
||||
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2023 - present Jiahang Li (visor.orionsec.cn ljh1553488six@139.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.dromara.visor.module.asset.entity.request.exec;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import org.dromara.visor.framework.common.entity.PageRequest;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* 设置计划任务执行用户 查询请求对象
|
||||
*
|
||||
* @author Jiahang Li
|
||||
* @version 1.0.3
|
||||
* @since 2024-3-28 12:03
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Schema(name = "ExecJobSetExecUserRequest", description = "设置计划任务执行用户 查询请求对象")
|
||||
public class ExecJobSetExecUserRequest extends PageRequest {
|
||||
|
||||
@NotNull
|
||||
@Schema(description = "id")
|
||||
private Long id;
|
||||
|
||||
@NotNull
|
||||
@Schema(description = "userId")
|
||||
private Long userId;
|
||||
|
||||
}
|
||||
@@ -50,4 +50,7 @@ public class ExecJobTriggerRequest implements Serializable {
|
||||
@Schema(description = "执行用户名")
|
||||
private String username;
|
||||
|
||||
@Schema(description = "执行方式")
|
||||
private String execMode;
|
||||
|
||||
}
|
||||
|
||||
@@ -55,6 +55,10 @@ public class ExecLogQueryRequest extends PageRequest {
|
||||
@Schema(description = "执行来源id")
|
||||
private Long sourceId;
|
||||
|
||||
@Size(max = 8)
|
||||
@Schema(description = "执行方式")
|
||||
private String execMode;
|
||||
|
||||
@Size(max = 128)
|
||||
@Schema(description = "执行描述")
|
||||
private String description;
|
||||
|
||||
@@ -74,6 +74,12 @@ public class ExecJobVO implements Serializable {
|
||||
@Schema(description = "最近执行时间")
|
||||
private Date recentLogTime;
|
||||
|
||||
@Schema(description = "执行用户id")
|
||||
private Long execUserId;
|
||||
|
||||
@Schema(description = "执行用户名")
|
||||
private String execUsername;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
|
||||
@@ -44,6 +44,9 @@ public class ExecLogVO implements Serializable {
|
||||
@Schema(description = "id")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "执行方式")
|
||||
private String execMode;
|
||||
|
||||
@Schema(description = "执行用户id")
|
||||
private Long userId;
|
||||
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright (c) 2023 - present Jiahang Li (visor.orionsec.cn ljh1553488six@139.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.dromara.visor.module.asset.enums;
|
||||
|
||||
/**
|
||||
* 执行方式
|
||||
*
|
||||
* @author Jiahang Li
|
||||
* @version 1.0.0
|
||||
* @since 2024/12/12 17:37
|
||||
*/
|
||||
public enum ExecModeEnum {
|
||||
|
||||
/**
|
||||
* 手动执行
|
||||
*/
|
||||
MANUAL,
|
||||
|
||||
/**
|
||||
* 定时任务
|
||||
*/
|
||||
JOB,
|
||||
|
||||
}
|
||||
@@ -27,7 +27,6 @@ import org.dromara.visor.framework.common.utils.Valid;
|
||||
import org.dromara.visor.module.asset.dao.HostIdentityDAO;
|
||||
import org.dromara.visor.module.asset.dao.HostKeyDAO;
|
||||
import org.dromara.visor.module.asset.enums.HostSshAuthTypeEnum;
|
||||
import org.dromara.visor.module.asset.enums.HostSshOsTypeEnum;
|
||||
import org.dromara.visor.module.asset.handler.host.config.model.HostSshConfigModel;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
||||
@@ -146,7 +146,7 @@ public abstract class BaseExecCommandHandler implements IExecCommandHandler {
|
||||
// 初始化日志
|
||||
this.initLogOutputStream();
|
||||
// 打开会话
|
||||
TerminalConnectDTO connect = terminalService.getTerminalConnectInfo(execHostCommand.getHostId());
|
||||
TerminalConnectDTO connect = terminalService.getTerminalConnectInfo(execHostCommand.getHostId(), execCommand.getUserId());
|
||||
this.sessionStore = SessionStores.openSessionStore(connect);
|
||||
if (Booleans.isTrue(execCommand.getScriptExec())) {
|
||||
// 上传脚本文件
|
||||
|
||||
@@ -18,9 +18,11 @@ package org.dromara.visor.module.asset.handler.host.exec.job;
|
||||
import cn.orionsec.kit.spring.SpringHolder;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.utils.OperatorLogs;
|
||||
import org.dromara.visor.framework.common.constant.Const;
|
||||
import org.dromara.visor.framework.common.constant.FieldConst;
|
||||
import org.dromara.visor.module.asset.dao.ExecJobDAO;
|
||||
import org.dromara.visor.module.asset.entity.domain.ExecJobDO;
|
||||
import org.dromara.visor.module.asset.entity.request.exec.ExecJobTriggerRequest;
|
||||
import org.dromara.visor.module.asset.enums.ExecModeEnum;
|
||||
import org.dromara.visor.module.asset.service.ExecJobService;
|
||||
import org.quartz.Job;
|
||||
import org.quartz.JobExecutionContext;
|
||||
@@ -35,19 +37,28 @@ import org.quartz.JobExecutionContext;
|
||||
@Slf4j
|
||||
public class ExecCommandJob implements Job {
|
||||
|
||||
private static final ExecJobDAO execJobDAO = SpringHolder.getBean(ExecJobDAO.class);
|
||||
|
||||
private static final ExecJobService execJobService = SpringHolder.getBean(ExecJobService.class);
|
||||
|
||||
@Override
|
||||
public void execute(JobExecutionContext context) {
|
||||
long id = context.getMergedJobDataMap().getLong(FieldConst.KEY);
|
||||
log.info("ExecCommandJob.execute id: {}", id);
|
||||
// 查询任务
|
||||
ExecJobDO job = execJobDAO.selectById(id);
|
||||
if (job == null) {
|
||||
log.info("ExecCommandJob.execute absent id: {}", id);
|
||||
return;
|
||||
}
|
||||
// 执行命令
|
||||
ExecJobTriggerRequest request = ExecJobTriggerRequest.builder()
|
||||
.id(id)
|
||||
.userId(Const.SYSTEM_USER_ID)
|
||||
.username(Const.SYSTEM_USERNAME)
|
||||
.userId(job.getExecUserId())
|
||||
.username(job.getExecUsername())
|
||||
.execMode(ExecModeEnum.JOB.name())
|
||||
.build();
|
||||
execJobService.triggerExecJob(request);
|
||||
execJobService.triggerExecJob(request, job);
|
||||
// 清理日志上下文
|
||||
OperatorLogs.clear();
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ public class TerminalCheckHandler extends AbstractTerminalHandler<TerminalCheckR
|
||||
Exception ex = null;
|
||||
try {
|
||||
// 获取连接信息
|
||||
connect = terminalService.getTerminalConnectInfo(userId, host);
|
||||
connect = terminalService.getTerminalConnectInfo(host, userId);
|
||||
connect.setConnectType(connectType.name());
|
||||
// 设置到缓存中
|
||||
channel.getAttributes().put(sessionId, connect);
|
||||
|
||||
@@ -110,7 +110,7 @@ public class TransferHandler implements ITransferHandler {
|
||||
if (terminalConnection == null) {
|
||||
// 获取终端连接信息
|
||||
Long userId = WebSockets.getAttr(channel, ExtraFieldConst.USER_ID);
|
||||
TerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(userId, hostId);
|
||||
TerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(hostId, userId);
|
||||
terminalConnection = new TerminalConnection(connectInfo, SessionStores.openSessionStore(connectInfo));
|
||||
terminalConnections.put(hostId, terminalConnection);
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package org.dromara.visor.module.asset.service;
|
||||
|
||||
import cn.orionsec.kit.lang.define.wrapper.DataGrid;
|
||||
import org.dromara.visor.module.asset.entity.domain.ExecJobDO;
|
||||
import org.dromara.visor.module.asset.entity.request.exec.*;
|
||||
import org.dromara.visor.module.asset.entity.vo.ExecJobVO;
|
||||
|
||||
@@ -77,6 +78,14 @@ public interface ExecJobService {
|
||||
*/
|
||||
DataGrid<ExecJobVO> getExecJobPage(ExecJobQueryRequest request);
|
||||
|
||||
/**
|
||||
* 设置执行用户
|
||||
*
|
||||
* @param request request
|
||||
* @return effect
|
||||
*/
|
||||
Integer setExecJobExecUser(ExecJobSetExecUserRequest request);
|
||||
|
||||
/**
|
||||
* 获取下一个执行序列
|
||||
*
|
||||
@@ -112,7 +121,8 @@ public interface ExecJobService {
|
||||
* 触发任务
|
||||
*
|
||||
* @param request request
|
||||
* @param job job
|
||||
*/
|
||||
void triggerExecJob(ExecJobTriggerRequest request);
|
||||
void triggerExecJob(ExecJobTriggerRequest request, ExecJobDO job);
|
||||
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ public interface TerminalService {
|
||||
* @param userId userId
|
||||
* @return session
|
||||
*/
|
||||
TerminalConnectDTO getTerminalConnectInfo(Long userId, Long hostId);
|
||||
TerminalConnectDTO getTerminalConnectInfo(Long hostId, Long userId);
|
||||
|
||||
/**
|
||||
* 使用用户配置获取连接信息
|
||||
@@ -93,6 +93,6 @@ public interface TerminalService {
|
||||
* @param userId userId
|
||||
* @return session
|
||||
*/
|
||||
TerminalConnectDTO getTerminalConnectInfo(Long userId, HostDO host);
|
||||
TerminalConnectDTO getTerminalConnectInfo(HostDO host, Long userId);
|
||||
|
||||
}
|
||||
|
||||
@@ -121,12 +121,14 @@ public class ExecCommandServiceImpl implements ExecCommandService {
|
||||
execRequest.setUserId(userId);
|
||||
execRequest.setUsername(user.getUsername());
|
||||
execRequest.setSource(ExecSourceEnum.BATCH.name());
|
||||
execRequest.setExecMode(ExecModeEnum.MANUAL.name());
|
||||
return this.execCommandWithSource(execRequest);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ExecLogVO execCommandWithSource(ExecCommandExecDTO request) {
|
||||
log.info("ExecService.execCommandWithSource start params: {}", JSON.toJSONString(request));
|
||||
String command = request.getCommand();
|
||||
List<Long> hostIdList = request.getHostIdList();
|
||||
// 查询主机信息
|
||||
|
||||
@@ -26,6 +26,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.utils.OperatorLogs;
|
||||
import org.dromara.visor.framework.common.constant.Const;
|
||||
import org.dromara.visor.framework.common.constant.ErrorMessage;
|
||||
import org.dromara.visor.framework.common.security.LoginUser;
|
||||
import org.dromara.visor.framework.common.utils.Valid;
|
||||
import org.dromara.visor.framework.job.core.utils.QuartzUtils;
|
||||
import org.dromara.visor.framework.security.core.utils.SecurityUtils;
|
||||
@@ -41,15 +42,13 @@ import org.dromara.visor.module.asset.entity.request.exec.*;
|
||||
import org.dromara.visor.module.asset.entity.vo.ExecJobVO;
|
||||
import org.dromara.visor.module.asset.entity.vo.ExecLogVO;
|
||||
import org.dromara.visor.module.asset.entity.vo.HostBaseVO;
|
||||
import org.dromara.visor.module.asset.enums.ExecJobStatusEnum;
|
||||
import org.dromara.visor.module.asset.enums.ExecSourceEnum;
|
||||
import org.dromara.visor.module.asset.enums.HostTypeEnum;
|
||||
import org.dromara.visor.module.asset.enums.ScriptExecEnum;
|
||||
import org.dromara.visor.module.asset.enums.*;
|
||||
import org.dromara.visor.module.asset.handler.host.exec.job.ExecCommandJob;
|
||||
import org.dromara.visor.module.asset.service.AssetAuthorizedDataService;
|
||||
import org.dromara.visor.module.asset.service.ExecCommandService;
|
||||
import org.dromara.visor.module.asset.service.ExecJobHostService;
|
||||
import org.dromara.visor.module.asset.service.ExecJobService;
|
||||
import org.dromara.visor.module.infra.api.SystemUserApi;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -57,7 +56,6 @@ import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -83,6 +81,9 @@ public class ExecJobServiceImpl implements ExecJobService {
|
||||
@Resource
|
||||
private HostDAO hostDAO;
|
||||
|
||||
@Resource
|
||||
private SystemUserApi systemUserApi;
|
||||
|
||||
@Resource
|
||||
private ExecJobHostService execJobHostService;
|
||||
|
||||
@@ -238,6 +239,30 @@ public class ExecJobServiceImpl implements ExecJobService {
|
||||
return dataGrid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer setExecJobExecUser(ExecJobSetExecUserRequest request) {
|
||||
Long id = request.getId();
|
||||
Long userId = request.getUserId();
|
||||
log.info("ExecJobService-setExecJobExecUser id: {}, userId: {}", id, userId);
|
||||
// 查询任务
|
||||
ExecJobDO job = execJobDAO.selectById(id);
|
||||
Valid.notNull(job, ErrorMessage.DATA_ABSENT);
|
||||
// 查询用户
|
||||
String username = systemUserApi.getUsernameById(userId);
|
||||
Valid.notNull(username, ErrorMessage.USER_ABSENT);
|
||||
// 修改任务
|
||||
ExecJobDO update = new ExecJobDO();
|
||||
update.setId(id);
|
||||
update.setExecUserId(userId);
|
||||
update.setExecUsername(username);
|
||||
int effect = execJobDAO.updateById(update);
|
||||
// 设置日志参数
|
||||
OperatorLogs.add(OperatorLogs.NAME, job.getName());
|
||||
OperatorLogs.add(OperatorLogs.USERNAME, username);
|
||||
log.info("ExecJobService-setExecJobExecUser effect: {}", effect);
|
||||
return effect;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getNextExecSeq(Long id) {
|
||||
// 自增
|
||||
@@ -285,25 +310,27 @@ public class ExecJobServiceImpl implements ExecJobService {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void manualTriggerExecJob(Long id) {
|
||||
log.info("ExecJobService.manualTriggerExecJob start id: {}", id);
|
||||
// 查询任务
|
||||
ExecJobDO job = execJobDAO.selectById(id);
|
||||
Valid.notNull(job, ErrorMessage.DATA_ABSENT);
|
||||
// 触发请求
|
||||
ExecJobTriggerRequest request = new ExecJobTriggerRequest();
|
||||
request.setId(id);
|
||||
request.setExecMode(ExecModeEnum.MANUAL.name());
|
||||
// 设置执行用户
|
||||
Optional.ofNullable(SecurityUtils.getLoginUser())
|
||||
.ifPresent(s -> {
|
||||
request.setUserId(s.getId());
|
||||
request.setUsername(s.getUsername());
|
||||
});
|
||||
LoginUser user = SecurityUtils.getLoginUser();
|
||||
if (user != null) {
|
||||
request.setUserId(user.getId());
|
||||
request.setUsername(user.getUsername());
|
||||
}
|
||||
// 触发任务
|
||||
this.triggerExecJob(request);
|
||||
this.triggerExecJob(request, job);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void triggerExecJob(ExecJobTriggerRequest request) {
|
||||
public void triggerExecJob(ExecJobTriggerRequest request, ExecJobDO job) {
|
||||
Long id = request.getId();
|
||||
// 查询任务
|
||||
ExecJobDO job = execJobDAO.selectById(id);
|
||||
Valid.notNull(job, ErrorMessage.DATA_ABSENT);
|
||||
// 查询任务主机
|
||||
List<Long> hostIdList = execJobHostService.getHostIdByJobId(id);
|
||||
if (hostIdList.isEmpty()) {
|
||||
@@ -322,6 +349,7 @@ public class ExecJobServiceImpl implements ExecJobService {
|
||||
.username(request.getUsername())
|
||||
.source(ExecSourceEnum.JOB.name())
|
||||
.sourceId(id)
|
||||
.execMode(request.getExecMode())
|
||||
.execSeq(execSeq)
|
||||
.description(job.getName())
|
||||
.timeout(job.getTimeout())
|
||||
|
||||
@@ -170,16 +170,16 @@ public class TerminalServiceImpl implements TerminalService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public TerminalConnectDTO getTerminalConnectInfo(Long userId, Long hostId) {
|
||||
public TerminalConnectDTO getTerminalConnectInfo(Long hostId, Long userId) {
|
||||
// 查询主机
|
||||
HostDO host = hostDAO.selectById(hostId);
|
||||
Valid.notNull(host, ErrorMessage.HOST_ABSENT);
|
||||
// 获取配置
|
||||
return this.getTerminalConnectInfo(userId, host);
|
||||
return this.getTerminalConnectInfo(host, userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TerminalConnectDTO getTerminalConnectInfo(Long userId, HostDO host) {
|
||||
public TerminalConnectDTO getTerminalConnectInfo(HostDO host, Long userId) {
|
||||
Long hostId = host.getId();
|
||||
log.info("HostTerminalService.getTerminalConnectInfo hostId: {}, userId: {}", hostId, userId);
|
||||
// 验证主机是否有权限
|
||||
|
||||
@@ -131,7 +131,7 @@ public class TerminalSftpServiceImpl implements TerminalSftpService {
|
||||
InputStream in = null;
|
||||
try {
|
||||
// 获取终端连接信息
|
||||
TerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(SecurityUtils.getLoginUserId(), cache.getHostId());
|
||||
TerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(cache.getHostId(), SecurityUtils.getLoginUserId());
|
||||
sessionStore = SessionStores.openSessionStore(connectInfo);
|
||||
executor = sessionStore.getSftpExecutor(connectInfo.getFileNameCharset());
|
||||
executor.connect();
|
||||
@@ -164,7 +164,7 @@ public class TerminalSftpServiceImpl implements TerminalSftpService {
|
||||
InputStream in = null;
|
||||
try {
|
||||
// 获取终端连接信息
|
||||
TerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(SecurityUtils.getLoginUserId(), cache.getHostId());
|
||||
TerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(cache.getHostId(), SecurityUtils.getLoginUserId());
|
||||
sessionStore = SessionStores.openSessionStore(connectInfo);
|
||||
executor = sessionStore.getSftpExecutor(connectInfo.getFileNameCharset());
|
||||
executor.connect();
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
<result column="parameter_schema" property="parameterSchema"/>
|
||||
<result column="status" property="status"/>
|
||||
<result column="recent_log_id" property="recentLogId"/>
|
||||
<result column="exec_user_id" property="execUserId"/>
|
||||
<result column="exec_username" property="execUsername"/>
|
||||
<result column="create_time" property="createTime"/>
|
||||
<result column="update_time" property="updateTime"/>
|
||||
<result column="creator" property="creator"/>
|
||||
@@ -23,7 +25,7 @@
|
||||
|
||||
<!-- 通用查询结果列 -->
|
||||
<sql id="Base_Column_List">
|
||||
id, name, exec_seq, expression, timeout, script_exec, command, parameter_schema, status, recent_log_id, create_time, update_time, creator, updater, deleted
|
||||
id, name, exec_seq, expression, timeout, script_exec, command, parameter_schema, status, recent_log_id, exec_user_id, exec_username, create_time, update_time, creator, updater, deleted
|
||||
</sql>
|
||||
|
||||
<update id="incrExecSeq">
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
<result column="username" property="username"/>
|
||||
<result column="source" property="source"/>
|
||||
<result column="source_id" property="sourceId"/>
|
||||
<result column="exec_mode" property="execMode"/>
|
||||
<result column="description" property="description"/>
|
||||
<result column="exec_seq" property="execSeq"/>
|
||||
<result column="command" property="command"/>
|
||||
@@ -27,7 +28,7 @@
|
||||
|
||||
<!-- 通用查询结果列 -->
|
||||
<sql id="Base_Column_List">
|
||||
id, user_id, username, source, source_id, description, exec_seq, command, parameter_schema, timeout, script_exec, status, start_time, finish_time, create_time, update_time, creator, updater, deleted
|
||||
id, user_id, username, source, source_id, exec_mode, description, exec_seq, command, parameter_schema, timeout, script_exec, status, start_time, finish_time, create_time, update_time, creator, updater, deleted
|
||||
</sql>
|
||||
|
||||
<select id="getExecHistory" resultMap="BaseResultMap">
|
||||
|
||||
@@ -16,10 +16,11 @@
|
||||
package org.dromara.visor.module.infra.define.operator;
|
||||
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.L;
|
||||
|
||||
/**
|
||||
* 认证服务 操作日志类型
|
||||
*
|
||||
@@ -39,9 +40,9 @@ public class AuthenticationOperatorType extends InitializingOperatorTypes {
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.L, LOGIN, "登录系统"),
|
||||
new OperatorType(OperatorRiskLevel.L, LOGOUT, "登出系统"),
|
||||
new OperatorType(OperatorRiskLevel.L, UPDATE_PASSWORD, "修改密码"),
|
||||
new OperatorType(L, LOGIN, "登录系统"),
|
||||
new OperatorType(L, LOGOUT, "登出系统"),
|
||||
new OperatorType(L, UPDATE_PASSWORD, "修改密码"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,11 @@
|
||||
package org.dromara.visor.module.infra.define.operator;
|
||||
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.*;
|
||||
|
||||
/**
|
||||
* 字典配置项 操作日志类型
|
||||
*
|
||||
@@ -39,9 +40,9 @@ public class DictKeyOperatorType extends InitializingOperatorTypes {
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.L, CREATE, "创建字典配置项 <sb>${keyName}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, UPDATE, "更新字典配置项 <sb>${keyName}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE, "删除字典配置项 <sb>${keyName}</sb>"),
|
||||
new OperatorType(L, CREATE, "创建字典配置项 <sb>${keyName}</sb>"),
|
||||
new OperatorType(M, UPDATE, "更新字典配置项 <sb>${keyName}</sb>"),
|
||||
new OperatorType(H, DELETE, "删除字典配置项 <sb>${keyName}</sb>"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,11 @@
|
||||
package org.dromara.visor.module.infra.define.operator;
|
||||
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.*;
|
||||
|
||||
/**
|
||||
* 字典配置值 操作日志类型
|
||||
*
|
||||
@@ -39,9 +40,9 @@ public class DictValueOperatorType extends InitializingOperatorTypes {
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.L, CREATE, "创建字典配置值 <sb>${keyName}</sb> - <sb>${label}</sb> | <sb>${value}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, UPDATE, "更新字典配置值 <sb>${keyName}</sb> - <sb>${label}</sb> | <sb>${value}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE, "删除字典配置值 <sb>${value}</sb>"),
|
||||
new OperatorType(L, CREATE, "创建字典配置值 <sb>${keyName}</sb> - <sb>${label}</sb> | <sb>${value}</sb>"),
|
||||
new OperatorType(M, UPDATE, "更新字典配置值 <sb>${keyName}</sb> - <sb>${label}</sb> | <sb>${value}</sb>"),
|
||||
new OperatorType(H, DELETE, "删除字典配置值 <sb>${value}</sb>"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,11 @@
|
||||
package org.dromara.visor.module.infra.define.operator;
|
||||
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.H;
|
||||
|
||||
/**
|
||||
* 操作日志 操作日志类型
|
||||
*
|
||||
@@ -37,8 +38,8 @@ public class OperatorLogOperatorType extends InitializingOperatorTypes {
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE, "删除操作日志 <sb>${count}</sb> 条"),
|
||||
new OperatorType(OperatorRiskLevel.H, CLEAR, "清空操作日志 <sb>${count}</sb> 条"),
|
||||
new OperatorType(H, DELETE, "删除操作日志 <sb>${count}</sb> 条"),
|
||||
new OperatorType(H, CLEAR, "清空操作日志 <sb>${count}</sb> 条"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,11 @@
|
||||
package org.dromara.visor.module.infra.define.operator;
|
||||
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.*;
|
||||
|
||||
/**
|
||||
* 系统菜单 操作日志类型
|
||||
*
|
||||
@@ -41,10 +42,10 @@ public class SystemMenuOperatorType extends InitializingOperatorTypes {
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.L, CREATE, "创建菜单 <sb>${name}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.L, UPDATE, "修改菜单 <sb>${name}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, UPDATE_STATUS, "修改菜单状态 <sb>${name}</sb> - <sb>${label}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE, "删除菜单 <sb>${name}</sb>"),
|
||||
new OperatorType(L, CREATE, "创建菜单 <sb>${name}</sb>"),
|
||||
new OperatorType(L, UPDATE, "修改菜单 <sb>${name}</sb>"),
|
||||
new OperatorType(M, UPDATE_STATUS, "修改菜单状态 <sb>${name}</sb> - <sb>${label}</sb>"),
|
||||
new OperatorType(H, DELETE, "删除菜单 <sb>${name}</sb>"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,11 @@
|
||||
package org.dromara.visor.module.infra.define.operator;
|
||||
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.*;
|
||||
|
||||
/**
|
||||
* 系统角色 操作日志类型
|
||||
*
|
||||
@@ -43,11 +44,11 @@ public class SystemRoleOperatorType extends InitializingOperatorTypes {
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.L, CREATE, "创建角色 <sb>${name}(${code})</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, UPDATE, "修改角色 <sb>${name}(${code})</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, UPDATE_STATUS, "修改角色状态 <sb>${name}(${code})</sb> - <sb>${statusName}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE, "删除角色 <sb>${name}(${code})</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, GRANT_MENU, "分配角色菜单 <sb>${name}(${code})</sb>"),
|
||||
new OperatorType(L, CREATE, "创建角色 <sb>${name}(${code})</sb>"),
|
||||
new OperatorType(M, UPDATE, "修改角色 <sb>${name}(${code})</sb>"),
|
||||
new OperatorType(M, UPDATE_STATUS, "修改角色状态 <sb>${name}(${code})</sb> - <sb>${statusName}</sb>"),
|
||||
new OperatorType(H, DELETE, "删除角色 <sb>${name}(${code})</sb>"),
|
||||
new OperatorType(M, GRANT_MENU, "分配角色菜单 <sb>${name}(${code})</sb>"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,11 @@
|
||||
package org.dromara.visor.module.infra.define.operator;
|
||||
|
||||
import org.dromara.visor.framework.biz.operator.log.core.annotation.Module;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.factory.InitializingOperatorTypes;
|
||||
import org.dromara.visor.framework.biz.operator.log.core.model.OperatorType;
|
||||
|
||||
import static org.dromara.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.*;
|
||||
|
||||
/**
|
||||
* 系统用户 操作日志类型
|
||||
*
|
||||
@@ -47,13 +48,13 @@ public class SystemUserOperatorType extends InitializingOperatorTypes {
|
||||
@Override
|
||||
public OperatorType[] types() {
|
||||
return new OperatorType[]{
|
||||
new OperatorType(OperatorRiskLevel.L, CREATE, "创建用户 <sb>${username}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, UPDATE, "修改用户 <sb>${username}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, UPDATE_STATUS, "修改用户状态 <sb>${username}</sb> - <sb>${statusName}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, GRANT_ROLE, "分配用户角色 <sb>${username}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, RESET_PASSWORD, "重置用户密码 <sb>${username}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.H, DELETE, "删除用户 <sb>${username}</sb>"),
|
||||
new OperatorType(OperatorRiskLevel.M, OFFLINE, "下线用户会话 <sb>${username}</sb>"),
|
||||
new OperatorType(L, CREATE, "创建用户 <sb>${username}</sb>"),
|
||||
new OperatorType(M, UPDATE, "修改用户 <sb>${username}</sb>"),
|
||||
new OperatorType(M, UPDATE_STATUS, "修改用户状态 <sb>${username}</sb> - <sb>${statusName}</sb>"),
|
||||
new OperatorType(M, GRANT_ROLE, "分配用户角色 <sb>${username}</sb>"),
|
||||
new OperatorType(H, RESET_PASSWORD, "重置用户密码 <sb>${username}</sb>"),
|
||||
new OperatorType(H, DELETE, "删除用户 <sb>${username}</sb>"),
|
||||
new OperatorType(M, OFFLINE, "下线用户会话 <sb>${username}</sb>"),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ export interface ExecLogQueryResponse extends TableData, ExecLogQueryExtraRespon
|
||||
status: string;
|
||||
startTime: number;
|
||||
finishTime: number;
|
||||
execMode: string;
|
||||
hostIdList: Array<number>;
|
||||
}
|
||||
|
||||
|
||||
@@ -58,12 +58,22 @@ export interface ExecJobQueryResponse extends TableData {
|
||||
recentLogId: number;
|
||||
recentLogStatus: string;
|
||||
recentLogTime: number;
|
||||
execUserId: number;
|
||||
execUsername: string;
|
||||
createTime: number;
|
||||
updateTime: number;
|
||||
hostIdList: Array<number>;
|
||||
hostList: Array<HostQueryResponse>;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置计划任务执行用户
|
||||
*/
|
||||
export interface ExecJobSetExecUserRequest {
|
||||
id: number;
|
||||
userId: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建计划任务
|
||||
*/
|
||||
@@ -106,6 +116,13 @@ export function getExecJobPage(request: ExecJobQueryRequest) {
|
||||
return axios.post<DataGrid<ExecJobQueryResponse>>('/asset/exec-job/query', request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置计划任务执行用户
|
||||
*/
|
||||
export function setExecJobExecUser(request: ExecJobSetExecUserRequest) {
|
||||
return axios.put<number>('/exec/exec-job/set-exec-user', request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除计划任务
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user