diff --git a/orion-visor-modules/orion-visor-module-common/src/main/java/org/dromara/visor/module/common/utils/SftpUtils.java b/orion-visor-modules/orion-visor-module-common/src/main/java/org/dromara/visor/module/common/utils/SftpUtils.java
index 2c662e1f..6dda7b46 100644
--- a/orion-visor-modules/orion-visor-module-common/src/main/java/org/dromara/visor/module/common/utils/SftpUtils.java
+++ b/orion-visor-modules/orion-visor-module-common/src/main/java/org/dromara/visor/module/common/utils/SftpUtils.java
@@ -22,10 +22,8 @@
*/
package org.dromara.visor.module.common.utils;
-import cn.orionsec.kit.lang.constant.Letters;
import cn.orionsec.kit.lang.utils.Booleans;
import cn.orionsec.kit.lang.utils.Strings;
-import cn.orionsec.kit.lang.utils.io.Files1;
import cn.orionsec.kit.net.host.sftp.SftpExecutor;
import cn.orionsec.kit.net.host.sftp.SftpFile;
import cn.orionsec.kit.spring.SpringHolder;
@@ -69,21 +67,4 @@ public class SftpUtils {
}
}
- /**
- * 获取移动目标路径
- *
- * @param source source
- * @param target target
- * @return absolute target
- */
- public static String getAbsoluteTargetPath(String source, String target) {
- if (target.charAt(0) == Letters.SLASH) {
- // 绝对路径
- return Files1.getPath(Files1.normalize(target));
- } else {
- // 相对路径
- return Files1.getPath(Files1.normalize(Files1.getPath(source + "/../" + target)));
- }
- }
-
}
diff --git a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/define/operator/TerminalOperatorType.java b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/define/operator/TerminalOperatorType.java
index 162c6e59..9752e2f5 100644
--- a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/define/operator/TerminalOperatorType.java
+++ b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/define/operator/TerminalOperatorType.java
@@ -74,15 +74,15 @@ public class TerminalOperatorType extends InitializingOperatorTypes {
new OperatorType(OperatorRiskLevel.L, SFTP_MKDIR, "创建文件夹 ${hostName} ${path}"),
new OperatorType(OperatorRiskLevel.L, SFTP_TOUCH, "创建文件 ${hostName} ${path}"),
new OperatorType(OperatorRiskLevel.M, SFTP_MOVE, "移动文件 ${hostName} ${path} 至 ${target}"),
- new OperatorType(OperatorRiskLevel.H, SFTP_REMOVE, "删除文件 ${hostName} ${path}"),
+ new OperatorType(OperatorRiskLevel.H, SFTP_REMOVE, "删除文件 ${hostName} ${count}个\n${path}"),
new OperatorType(OperatorRiskLevel.H, SFTP_TRUNCATE, "截断文件 ${hostName} ${path}"),
new OperatorType(OperatorRiskLevel.M, SFTP_CHMOD, "文件提权 ${hostName} ${path} ${mod}"),
new OperatorType(OperatorRiskLevel.M, SFTP_CHOWN, "修改文件归属 ${hostName} ${path} ${id}"),
new OperatorType(OperatorRiskLevel.M, SFTP_CHGRP, "修改文件分组 ${hostName} ${path} ${id}"),
new OperatorType(OperatorRiskLevel.L, SFTP_GET_CONTENT, "获取文件内容 ${hostName} ${path}"),
new OperatorType(OperatorRiskLevel.M, SFTP_SET_CONTENT, "修改文件内容 ${hostName} ${path}"),
- new OperatorType(OperatorRiskLevel.M, SFTP_UPLOAD, "上传文件 ${hostName} ${path}"),
- new OperatorType(OperatorRiskLevel.M, SFTP_DOWNLOAD, "下载文件 ${hostName} ${path}"),
+ new OperatorType(OperatorRiskLevel.M, SFTP_UPLOAD, "上传文件 ${hostName} (${count}个)\n${path}"),
+ new OperatorType(OperatorRiskLevel.M, SFTP_DOWNLOAD, "下载文件 ${hostName} (${count}个)\n${path}"),
new OperatorType(OperatorRiskLevel.M, RDP_UPLOAD, "上传文件 ${hostName} ${path}"),
new OperatorType(OperatorRiskLevel.M, RDP_DOWNLOAD, "下载文件 ${hostName} ${path}"),
};
diff --git a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/terminal/handler/SftpDownloadFlatDirectoryHandler.java b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/terminal/handler/SftpDownloadFlatDirectoryHandler.java
index eaa03ac8..6dc9b143 100644
--- a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/terminal/handler/SftpDownloadFlatDirectoryHandler.java
+++ b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/terminal/handler/SftpDownloadFlatDirectoryHandler.java
@@ -29,6 +29,7 @@ import org.dromara.visor.module.terminal.handler.terminal.model.request.SftpDown
import org.dromara.visor.module.terminal.handler.terminal.model.response.SftpFileVO;
import org.dromara.visor.module.terminal.handler.terminal.sender.ISftpTerminalSender;
import org.dromara.visor.module.terminal.handler.terminal.session.ISftpSession;
+import org.dromara.visor.module.terminal.utils.SftpFileUtils;
import org.springframework.stereotype.Component;
import java.util.Arrays;
@@ -50,7 +51,7 @@ public class SftpDownloadFlatDirectoryHandler extends AbstractTerminalHandler files = Lists.empty();
diff --git a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/terminal/handler/SftpRemoveHandler.java b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/terminal/handler/SftpRemoveHandler.java
index 81693ce7..df595b10 100644
--- a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/terminal/handler/SftpRemoveHandler.java
+++ b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/terminal/handler/SftpRemoveHandler.java
@@ -24,12 +24,14 @@ package org.dromara.visor.module.terminal.handler.terminal.handler;
import cn.orionsec.kit.lang.utils.collect.Maps;
import lombok.extern.slf4j.Slf4j;
+import org.dromara.visor.common.constant.Const;
import org.dromara.visor.framework.biz.operator.log.core.utils.OperatorLogs;
import org.dromara.visor.module.terminal.define.operator.TerminalOperatorType;
import org.dromara.visor.module.terminal.handler.terminal.model.TerminalChannelProps;
import org.dromara.visor.module.terminal.handler.terminal.model.request.SftpBaseRequest;
import org.dromara.visor.module.terminal.handler.terminal.sender.ISftpTerminalSender;
import org.dromara.visor.module.terminal.handler.terminal.session.ISftpSession;
+import org.dromara.visor.module.terminal.utils.SftpFileUtils;
import org.springframework.stereotype.Component;
import java.util.Arrays;
@@ -49,11 +51,11 @@ public class SftpRemoveHandler extends AbstractTerminalHandler extra = Maps.newMap();
extra.put(OperatorLogs.PATH, path);
+ extra.put(OperatorLogs.COUNT, paths.length);
this.saveOperatorLog(props,
extra, TerminalOperatorType.SFTP_REMOVE,
startTime, ex);
diff --git a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/terminal/handler/TerminalConnectHandler.java b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/terminal/handler/TerminalConnectHandler.java
index d2aab8b7..14555223 100644
--- a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/terminal/handler/TerminalConnectHandler.java
+++ b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/terminal/handler/TerminalConnectHandler.java
@@ -129,6 +129,7 @@ public class TerminalConnectHandler extends AbstractTerminalHandler extra = Maps.newMap();
- extra.put(OperatorLogs.PATH, path);
- extra.put(OperatorLogs.HOST_ID, connectConfig.getHostId());
- extra.put(OperatorLogs.HOST_NAME, connectConfig.getHostName());
- extra.put(OperatorLogs.ADDRESS, connectConfig.getHostAddress());
- // 获取日志
- TerminalChannelProps props = WebSockets.getAttr(channel, FieldConst.PROPS);
- OperatorLogModel model = TerminalUtils.getOperatorLogModel(props, extra, type, System.currentTimeMillis(), null);
- // 保存
+ protected void saveOperatorLog(Long logId, String type, List paths) {
+ String path = String.join(Const.LF, paths);
+ int count = paths.size();
+ // 获取操作日志
+ OperatorLogModel model = TransferUtils.getOperatorLogModel(type, path, count, connectConfig, WebSockets.getAttr(channel, FieldConst.PROPS));
+ // 保存操作日志
TerminalAsyncSaver.saveOperatorLog(model);
}
diff --git a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/transfer/session/UploadSession.java b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/transfer/session/UploadSession.java
index 30955a2b..447aa69b 100644
--- a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/transfer/session/UploadSession.java
+++ b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/transfer/session/UploadSession.java
@@ -22,6 +22,7 @@
*/
package org.dromara.visor.module.terminal.handler.transfer.session;
+import cn.orionsec.kit.lang.utils.collect.Lists;
import cn.orionsec.kit.lang.utils.io.Streams;
import cn.orionsec.kit.net.host.SessionStore;
import lombok.extern.slf4j.Slf4j;
@@ -58,7 +59,7 @@ public class UploadSession extends TransferSession {
try {
log.info("UploadSession.startUpload start channelId: {}, path: {}", channelId, path);
// 保存操作日志
- this.saveOperatorLog(TerminalOperatorType.SFTP_UPLOAD, path);
+ this.saveOperatorLog(request.getLogId(), TerminalOperatorType.SFTP_UPLOAD, Lists.singleton(path));
// 检查连接
this.init();
// 检查文件是否存在
diff --git a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/transfer/utils/TransferUtils.java b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/transfer/utils/TransferUtils.java
index d4b0cf2a..8dcf85d3 100644
--- a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/transfer/utils/TransferUtils.java
+++ b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/transfer/utils/TransferUtils.java
@@ -23,14 +23,21 @@
package org.dromara.visor.module.terminal.handler.transfer.utils;
import cn.orionsec.kit.lang.utils.Strings;
+import cn.orionsec.kit.lang.utils.collect.Maps;
import com.alibaba.fastjson.JSON;
import org.apache.catalina.connector.ClientAbortException;
import org.dromara.visor.common.constant.ErrorMessage;
+import org.dromara.visor.common.session.config.BaseConnectConfig;
+import org.dromara.visor.framework.biz.operator.log.core.model.OperatorLogModel;
+import org.dromara.visor.framework.biz.operator.log.core.utils.OperatorLogs;
import org.dromara.visor.framework.websocket.core.utils.WebSockets;
+import org.dromara.visor.module.terminal.handler.terminal.model.TerminalChannelProps;
+import org.dromara.visor.module.terminal.handler.terminal.utils.TerminalUtils;
import org.dromara.visor.module.terminal.handler.transfer.enums.TransferReceiver;
import org.dromara.visor.module.terminal.handler.transfer.model.TransferOperatorResponse;
import org.springframework.web.socket.WebSocketSession;
+import java.util.Map;
import java.util.function.Consumer;
/**
@@ -45,6 +52,30 @@ public class TransferUtils {
private TransferUtils() {
}
+ /**
+ * 获取传输操作日志
+ *
+ * @param type type
+ * @param path path
+ * @param count count
+ * @param config config
+ * @param props props
+ */
+ public static OperatorLogModel getOperatorLogModel(String type,
+ String path, Integer count,
+ BaseConnectConfig config,
+ TerminalChannelProps props) {
+ // 设置参数
+ Map extra = Maps.newMap();
+ extra.put(OperatorLogs.PATH, path);
+ extra.put(OperatorLogs.COUNT, count);
+ extra.put(OperatorLogs.HOST_ID, config.getHostId());
+ extra.put(OperatorLogs.HOST_NAME, config.getHostName());
+ extra.put(OperatorLogs.ADDRESS, config.getHostAddress());
+ // 获取操作日志
+ return TerminalUtils.getOperatorLogModel(props, extra, type, System.currentTimeMillis(), null);
+ }
+
/**
* 发送消息
*
diff --git a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/utils/SftpFileUtils.java b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/utils/SftpFileUtils.java
index 27eb64e5..8c97c447 100644
--- a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/utils/SftpFileUtils.java
+++ b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/utils/SftpFileUtils.java
@@ -22,6 +22,7 @@
*/
package org.dromara.visor.module.terminal.utils;
+import cn.orionsec.kit.lang.constant.Letters;
import cn.orionsec.kit.lang.utils.io.FileType;
import cn.orionsec.kit.lang.utils.io.Files1;
import cn.orionsec.kit.net.host.sftp.SftpFile;
@@ -41,6 +42,33 @@ public class SftpFileUtils {
private SftpFileUtils() {
}
+ /**
+ * 获取移动目标路径
+ *
+ * @param source source
+ * @param target target
+ * @return absolute target
+ */
+ public static String getAbsoluteTargetPath(String source, String target) {
+ if (target.charAt(0) == Letters.SLASH) {
+ // 绝对路径
+ return Files1.getPath(Files1.normalize(target));
+ } else {
+ // 相对路径
+ return Files1.getPath(Files1.normalize(Files1.getPath(source + "/../" + target)));
+ }
+ }
+
+ /**
+ * 分割文件路径
+ *
+ * @param path path
+ * @return paths
+ */
+ public static String[] fromMultiPaths(String path) {
+ return path.split("\\|");
+ }
+
/**
* 转为文件
*