拆分模块.

This commit is contained in:
lijiahang
2024-10-16 15:37:12 +08:00
parent 3e41e17367
commit d82f5b4bfb
48 changed files with 180 additions and 181 deletions

View File

@@ -62,11 +62,11 @@ public class AssetWebSocketConfiguration implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
// 终端会话
registry.addHandler(terminalMessageDispatcher, prefix + "/host/terminal/{accessToken}")
registry.addHandler(terminalMessageDispatcher, prefix + "/terminal/access/{accessToken}")
.addInterceptors(terminalAccessInterceptor)
.setAllowedOrigins("*");
// 文件传输
registry.addHandler(transferMessageDispatcher, prefix + "/host/transfer/{transferToken}")
registry.addHandler(transferMessageDispatcher, prefix + "/terminal/transfer/{transferToken}")
.addInterceptors(terminalTransferInterceptor)
.setAllowedOrigins("*");
// 执行日志

View File

@@ -22,7 +22,7 @@ import com.orion.visor.framework.log.core.annotation.IgnoreLog;
import com.orion.visor.framework.log.core.enums.IgnoreLogMode;
import com.orion.visor.framework.web.core.annotation.IgnoreWrapper;
import com.orion.visor.framework.web.core.annotation.RestWrapper;
import com.orion.visor.module.asset.define.operator.HostTerminalOperatorType;
import com.orion.visor.module.asset.define.operator.TerminalOperatorType;
import com.orion.visor.module.asset.entity.request.host.HostSftpLogQueryRequest;
import com.orion.visor.module.asset.entity.vo.HostSftpLogVO;
import com.orion.visor.module.asset.service.HostSftpService;
@@ -67,7 +67,7 @@ public class HostSftpLogController {
return hostSftpService.getHostSftpLogPage(request);
}
@OperatorLog(HostTerminalOperatorType.DELETE_SFTP_LOG)
@OperatorLog(TerminalOperatorType.DELETE_SFTP_LOG)
@DeleteMapping("/delete-log")
@Operation(summary = "删除 SFTP 操作日志")
@Parameter(name = "idList", description = "idList", required = true)

View File

@@ -18,7 +18,7 @@ package com.orion.visor.module.asset.controller;
import com.orion.visor.framework.log.core.annotation.IgnoreLog;
import com.orion.visor.framework.log.core.enums.IgnoreLogMode;
import com.orion.visor.framework.web.core.annotation.RestWrapper;
import com.orion.visor.module.asset.entity.vo.HostTerminalThemeVO;
import com.orion.visor.module.asset.entity.vo.TerminalThemeVO;
import com.orion.visor.module.asset.service.TerminalService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -33,7 +33,7 @@ import javax.annotation.Resource;
import java.util.List;
/**
* 主机终端 api
* 终端 api
*
* @author Jiahang Li
* @version 1.0.0
@@ -53,7 +53,7 @@ public class TerminalController {
@IgnoreLog(IgnoreLogMode.ALL)
@GetMapping("/themes")
@Operation(summary = "获取终端主题")
public List<HostTerminalThemeVO> getTerminalThemes() {
public List<TerminalThemeVO> getTerminalThemes() {
return terminalService.getTerminalThemes();
}

View File

@@ -16,7 +16,7 @@
package com.orion.visor.module.asset.convert;
import com.orion.visor.module.asset.entity.domain.TerminalConnectLogDO;
import com.orion.visor.module.asset.entity.dto.HostTerminalConnectDTO;
import com.orion.visor.module.asset.entity.dto.TerminalConnectDTO;
import com.orion.visor.module.asset.entity.request.host.TerminalConnectLogCreateRequest;
import com.orion.visor.module.asset.entity.request.host.TerminalConnectLogQueryRequest;
import com.orion.visor.module.asset.entity.vo.TerminalConnectLogVO;
@@ -43,7 +43,7 @@ public interface TerminalConnectLogConvert {
TerminalConnectLogVO to(TerminalConnectLogDO domain);
TerminalConnectLogCreateRequest to(HostTerminalConnectDTO dto);
TerminalConnectLogCreateRequest to(TerminalConnectDTO dto);
List<TerminalConnectLogVO> to(List<TerminalConnectLogDO> list);

View File

@@ -18,48 +18,48 @@ package com.orion.visor.module.asset.define.cache;
import com.orion.lang.define.cache.key.CacheKeyBuilder;
import com.orion.lang.define.cache.key.CacheKeyDefine;
import com.orion.lang.define.cache.key.struct.RedisCacheStruct;
import com.orion.visor.module.asset.entity.dto.HostTerminalAccessDTO;
import com.orion.visor.module.asset.entity.dto.HostTerminalTransferDTO;
import com.orion.visor.module.asset.entity.dto.SftpGetContentCacheDTO;
import com.orion.visor.module.asset.entity.dto.SftpSetContentCacheDTO;
import com.orion.visor.module.asset.entity.dto.TerminalAccessDTO;
import com.orion.visor.module.asset.entity.dto.TerminalTransferDTO;
import java.util.concurrent.TimeUnit;
/**
* 主机终端服务缓存 key
* 终端服务缓存 key
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/12/27 18:13
*/
public interface HostTerminalCacheKeyDefine {
public interface TerminalCacheKeyDefine {
CacheKeyDefine HOST_TERMINAL_ACCESS = new CacheKeyBuilder()
.key("host:terminal:access:{}")
.desc("主机终端访问token ${token}")
.type(HostTerminalAccessDTO.class)
CacheKeyDefine TERMINAL_ACCESS = new CacheKeyBuilder()
.key("terminal:access:{}")
.desc("终端访问token ${token}")
.type(TerminalAccessDTO.class)
.struct(RedisCacheStruct.STRING)
.timeout(3, TimeUnit.MINUTES)
.build();
CacheKeyDefine HOST_TERMINAL_TRANSFER = new CacheKeyBuilder()
.key("host:terminal:transfer:{}")
.desc("主机终端传输token ${token}")
.type(HostTerminalTransferDTO.class)
CacheKeyDefine TERMINAL_TRANSFER = new CacheKeyBuilder()
.key("terminal:transfer:{}")
.desc("终端传输token ${token}")
.type(TerminalTransferDTO.class)
.struct(RedisCacheStruct.STRING)
.timeout(3, TimeUnit.MINUTES)
.build();
CacheKeyDefine SFTP_GET_CONTENT = new CacheKeyBuilder()
.key("sftp:get:content:{}")
CacheKeyDefine TERMINAL_SFTP_GET_CONTENT = new CacheKeyBuilder()
.key("terminal:sftp:gc:{}")
.desc("sftp 获取文件内容 ${token}")
.type(SftpGetContentCacheDTO.class)
.struct(RedisCacheStruct.STRING)
.timeout(5, TimeUnit.MINUTES)
.build();
CacheKeyDefine SFTP_SET_CONTENT = new CacheKeyBuilder()
.key("sftp:set:content:{}")
CacheKeyDefine TERMINAL_SFTP_SET_CONTENT = new CacheKeyBuilder()
.key("terminal:sftp:sc:{}")
.desc("sftp 设置文件内容 ${token}")
.type(SftpSetContentCacheDTO.class)
.struct(RedisCacheStruct.STRING)

View File

@@ -25,14 +25,14 @@ import java.util.List;
import static com.orion.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.*;
/**
* 主机终端 操作日志类型
* 终端 操作日志类型
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/10/10 17:30
*/
@Module("asset:terminal")
public class HostTerminalOperatorType extends InitializingOperatorTypes {
public class TerminalOperatorType extends InitializingOperatorTypes {
public static final String CONNECT = "terminal:connect";

View File

@@ -23,7 +23,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 主机终端访问参数
* 终端访问参数
*
* @author Jiahang Li
* @version 1.0.0
@@ -34,8 +34,8 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@DesensitizeObject
@Schema(name = "HostTerminalAccessDTO", description = "主机终端访问参数")
public class HostTerminalAccessDTO {
@Schema(name = "TerminalAccessDTO", description = "终端访问参数")
public class TerminalAccessDTO {
@Schema(description = "userId")
private Long userId;

View File

@@ -24,7 +24,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 主机终端连接参数
* 终端连接参数
*
* @author Jiahang Li
* @version 1.0.0
@@ -35,8 +35,8 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@DesensitizeObject
@Schema(name = "HostTerminalConnectDTO", description = "主机终端连接参数")
public class HostTerminalConnectDTO {
@Schema(name = "TerminalConnectDTO", description = "终端连接参数")
public class TerminalConnectDTO {
@Schema(description = "logId")
private Long logId;

View File

@@ -23,7 +23,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 主机终端传输参数
* 终端传输参数
*
* @author Jiahang Li
* @version 1.0.0
@@ -34,8 +34,8 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@DesensitizeObject
@Schema(name = "HostTerminalTransferDTO", description = "主机终端传输参数")
public class HostTerminalTransferDTO {
@Schema(name = "TerminalTransferDTO", description = "终端传输参数")
public class TerminalTransferDTO {
@Schema(description = "userId")
private Long userId;

View File

@@ -23,7 +23,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 主机终端主题 视图响应对象
* 终端主题 视图响应对象
*
* @author Jiahang Li
* @version 1.0.0
@@ -33,8 +33,8 @@ import lombok.NoArgsConstructor;
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(name = "HostTerminalThemeVO", description = "主机终端主题 视图响应对象")
public class HostTerminalThemeVO {
@Schema(name = "TerminalThemeVO", description = "终端主题 视图响应对象")
public class TerminalThemeVO {
@Schema(description = "主题名称")
private String name;

View File

@@ -35,7 +35,7 @@ import com.orion.visor.framework.common.file.FileClient;
import com.orion.visor.framework.common.utils.PathUtils;
import com.orion.visor.module.asset.dao.ExecHostLogDAO;
import com.orion.visor.module.asset.entity.domain.ExecHostLogDO;
import com.orion.visor.module.asset.entity.dto.HostTerminalConnectDTO;
import com.orion.visor.module.asset.entity.dto.TerminalConnectDTO;
import com.orion.visor.module.asset.enums.ExecHostStatusEnum;
import com.orion.visor.module.asset.handler.host.exec.command.model.ExecCommandDTO;
import com.orion.visor.module.asset.handler.host.exec.command.model.ExecCommandHostDTO;
@@ -146,7 +146,7 @@ public abstract class BaseExecCommandHandler implements IExecCommandHandler {
// 初始化日志
this.initLogOutputStream();
// 打开会话
HostTerminalConnectDTO connect = terminalService.getTerminalConnectInfo(execHostCommand.getHostId());
TerminalConnectDTO connect = terminalService.getTerminalConnectInfo(execHostCommand.getHostId());
this.sessionStore = SessionStores.openSessionStore(connect);
if (Booleans.isTrue(execCommand.getScriptExec())) {
// 上传脚本文件

View File

@@ -25,7 +25,7 @@ import com.orion.net.host.SessionStore;
import com.orion.visor.framework.common.constant.AppConst;
import com.orion.visor.framework.common.constant.Const;
import com.orion.visor.framework.common.utils.CryptoUtils;
import com.orion.visor.module.asset.entity.dto.HostTerminalConnectDTO;
import com.orion.visor.module.asset.entity.dto.TerminalConnectDTO;
import lombok.extern.slf4j.Slf4j;
import java.util.Optional;
@@ -48,7 +48,7 @@ public class SessionStores {
* @param conn conn
* @return sessionStore
*/
public static SessionStore openSessionStore(HostTerminalConnectDTO conn) {
public static SessionStore openSessionStore(TerminalConnectDTO conn) {
Long hostId = conn.getHostId();
String address = conn.getHostAddress();
String username = conn.getUsername();
@@ -81,7 +81,7 @@ public class SessionStores {
* @param sessionHolder sessionHolder
* @return sessionStore
*/
private static SessionStore createSessionStore(HostTerminalConnectDTO conn, SessionHolder sessionHolder) {
private static SessionStore createSessionStore(TerminalConnectDTO conn, SessionHolder sessionHolder) {
final boolean useKey = conn.getKeyId() != null;
// 使用密钥认证
if (useKey) {

View File

@@ -17,7 +17,7 @@ package com.orion.visor.module.asset.handler.host.terminal;
import com.orion.visor.module.asset.define.AssetThreadPools;
import com.orion.visor.module.asset.handler.host.terminal.enums.InputTypeEnum;
import com.orion.visor.module.asset.handler.host.terminal.manager.HostTerminalManager;
import com.orion.visor.module.asset.handler.host.terminal.manager.TerminalManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
@@ -39,7 +39,7 @@ import javax.annotation.Resource;
public class TerminalMessageDispatcher extends AbstractWebSocketHandler {
@Resource
private HostTerminalManager hostTerminalManager;
private TerminalManager terminalManager;
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) {
@@ -80,7 +80,7 @@ public class TerminalMessageDispatcher extends AbstractWebSocketHandler {
String id = session.getId();
log.info("TerminalMessageDispatcher-afterConnectionClosed id: {}, code: {}, reason: {}", id, status.getCode(), status.getReason());
// 关闭会话
hostTerminalManager.closeSession(id);
terminalManager.closeSession(id);
}
}

View File

@@ -15,14 +15,13 @@
*/
package com.orion.visor.module.asset.handler.host.terminal.handler;
import com.orion.lang.exception.argument.InvalidArgumentException;
import com.orion.visor.framework.biz.operator.log.core.model.OperatorLogModel;
import com.orion.visor.framework.biz.operator.log.core.service.OperatorLogFrameworkService;
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
import com.orion.visor.framework.common.constant.ErrorMessage;
import com.orion.visor.framework.websocket.core.utils.WebSockets;
import com.orion.visor.module.asset.handler.host.terminal.enums.OutputTypeEnum;
import com.orion.visor.module.asset.handler.host.terminal.manager.HostTerminalManager;
import com.orion.visor.module.asset.handler.host.terminal.manager.TerminalManager;
import com.orion.visor.module.asset.handler.host.terminal.model.TerminalBasePayload;
import com.orion.visor.module.asset.handler.host.terminal.model.TerminalConfig;
import com.orion.visor.module.asset.handler.host.terminal.session.ITerminalSession;
@@ -42,7 +41,7 @@ import java.util.Map;
public abstract class AbstractTerminalHandler<T extends TerminalBasePayload> implements ITerminalHandler<T> {
@Resource
protected HostTerminalManager hostTerminalManager;
protected TerminalManager terminalManager;
@Resource
private OperatorLogFrameworkService operatorLogFrameworkService;
@@ -90,7 +89,7 @@ public abstract class AbstractTerminalHandler<T extends TerminalBasePayload> imp
String channelId = channel.getId();
String sessionId = payload.getSessionId();
// 获取会话并且设置参数
ITerminalSession session = hostTerminalManager.getSession(channelId, sessionId);
ITerminalSession session = terminalManager.getSession(channelId, sessionId);
if (session != null) {
TerminalConfig config = session.getConfig();
extra.put(OperatorLogs.HOST_ID, config.getHostId());

View File

@@ -18,7 +18,7 @@ package com.orion.visor.module.asset.handler.host.terminal.handler;
import com.orion.lang.utils.collect.Maps;
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
import com.orion.visor.framework.common.enums.BooleanBit;
import com.orion.visor.module.asset.define.operator.HostTerminalOperatorType;
import com.orion.visor.module.asset.define.operator.TerminalOperatorType;
import com.orion.visor.module.asset.handler.host.terminal.enums.OutputTypeEnum;
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpChangeModeRequest;
import com.orion.visor.module.asset.handler.host.terminal.model.response.SftpBaseResponse;
@@ -45,7 +45,7 @@ public class SftpChangeModeHandler extends AbstractTerminalHandler<SftpChangeMod
long startTime = System.currentTimeMillis();
// 获取会话
String sessionId = payload.getSessionId();
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
String path = payload.getPath();
Integer mod = payload.getMod();
log.info("SftpChangeModeHandler-handle start sessionId: {}, path: {}, mod: {}", sessionId, path, mod);
@@ -71,7 +71,7 @@ public class SftpChangeModeHandler extends AbstractTerminalHandler<SftpChangeMod
extra.put(OperatorLogs.PATH, path);
extra.put(OperatorLogs.MOD, mod);
this.saveOperatorLog(payload, channel,
extra, HostTerminalOperatorType.SFTP_CHMOD,
extra, TerminalOperatorType.SFTP_CHMOD,
startTime, ex);
}

View File

@@ -45,7 +45,7 @@ public class SftpDownloadFlatDirectoryHandler extends AbstractTerminalHandler<Sf
public void handle(WebSocketSession channel, SftpDownloadFlatDirectoryRequest payload) {
// 获取会话
String sessionId = payload.getSessionId();
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
String[] paths = payload.getPath().split("\\|");
log.info("SftpDownloadFlatDirectoryHandler-handle start sessionId: {}, paths: {}", sessionId, Arrays.toString(paths));
Exception ex = null;

View File

@@ -18,7 +18,7 @@ package com.orion.visor.module.asset.handler.host.terminal.handler;
import com.orion.lang.id.UUIds;
import com.orion.visor.framework.common.enums.BooleanBit;
import com.orion.visor.framework.redis.core.utils.RedisStrings;
import com.orion.visor.module.asset.define.cache.HostTerminalCacheKeyDefine;
import com.orion.visor.module.asset.define.cache.TerminalCacheKeyDefine;
import com.orion.visor.module.asset.entity.dto.SftpGetContentCacheDTO;
import com.orion.visor.module.asset.handler.host.terminal.enums.OutputTypeEnum;
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
@@ -43,7 +43,7 @@ public class SftpGetContentHandler extends AbstractTerminalHandler<SftpBaseReque
public void handle(WebSocketSession channel, SftpBaseRequest payload) {
// 获取会话
String sessionId = payload.getSessionId();
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
String path = payload.getPath();
log.info("SftpGetContentHandler-handle start sessionId: {}, path: {}", sessionId, path);
String token = UUIds.random32();
@@ -52,12 +52,12 @@ public class SftpGetContentHandler extends AbstractTerminalHandler<SftpBaseReque
// 检查文件是否可编辑
session.checkCanEdit(path);
// 设置缓存
String key = HostTerminalCacheKeyDefine.SFTP_GET_CONTENT.format(token);
String key = TerminalCacheKeyDefine.TERMINAL_SFTP_GET_CONTENT.format(token);
SftpGetContentCacheDTO cache = SftpGetContentCacheDTO.builder()
.hostId(session.getConfig().getHostId())
.path(path)
.build();
RedisStrings.setJson(key, HostTerminalCacheKeyDefine.SFTP_GET_CONTENT, cache);
RedisStrings.setJson(key, TerminalCacheKeyDefine.TERMINAL_SFTP_GET_CONTENT, cache);
log.info("SftpGetContentHandler-handle success sessionId: {}, path: {}", sessionId, path);
} catch (Exception e) {
log.error("SftpGetContentHandler-handle error sessionId: {}", sessionId, e);

View File

@@ -46,7 +46,7 @@ public class SftpListHandler extends AbstractTerminalHandler<SftpListRequest> {
public void handle(WebSocketSession channel, SftpListRequest payload) {
// 获取会话
String sessionId = payload.getSessionId();
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
String path = payload.getPath();
log.info("SftpListHandler-handle start sessionId: {}, path: {}", sessionId, path);
Exception ex = null;

View File

@@ -18,7 +18,7 @@ package com.orion.visor.module.asset.handler.host.terminal.handler;
import com.orion.lang.utils.collect.Maps;
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
import com.orion.visor.framework.common.enums.BooleanBit;
import com.orion.visor.module.asset.define.operator.HostTerminalOperatorType;
import com.orion.visor.module.asset.define.operator.TerminalOperatorType;
import com.orion.visor.module.asset.handler.host.terminal.enums.OutputTypeEnum;
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
import com.orion.visor.module.asset.handler.host.terminal.model.response.SftpBaseResponse;
@@ -45,7 +45,7 @@ public class SftpMakeDirectoryHandler extends AbstractTerminalHandler<SftpBaseRe
long startTime = System.currentTimeMillis();
// 获取会话
String sessionId = payload.getSessionId();
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
String path = payload.getPath();
log.info("SftpMakeDirectoryHandler-handle start sessionId: {}, path: {}", sessionId, path);
Exception ex = null;
@@ -69,7 +69,7 @@ public class SftpMakeDirectoryHandler extends AbstractTerminalHandler<SftpBaseRe
Map<String, Object> extra = Maps.newMap();
extra.put(OperatorLogs.PATH, path);
this.saveOperatorLog(payload, channel,
extra, HostTerminalOperatorType.SFTP_MKDIR,
extra, TerminalOperatorType.SFTP_MKDIR,
startTime, ex);
}

View File

@@ -18,7 +18,7 @@ package com.orion.visor.module.asset.handler.host.terminal.handler;
import com.orion.lang.utils.collect.Maps;
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
import com.orion.visor.framework.common.enums.BooleanBit;
import com.orion.visor.module.asset.define.operator.HostTerminalOperatorType;
import com.orion.visor.module.asset.define.operator.TerminalOperatorType;
import com.orion.visor.module.asset.handler.host.terminal.enums.OutputTypeEnum;
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpMoveRequest;
import com.orion.visor.module.asset.handler.host.terminal.model.response.SftpBaseResponse;
@@ -45,7 +45,7 @@ public class SftpMoveHandler extends AbstractTerminalHandler<SftpMoveRequest> {
long startTime = System.currentTimeMillis();
// 获取会话
String sessionId = payload.getSessionId();
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
String path = payload.getPath();
String target = payload.getTarget();
log.info("SftpMoveHandler-handle start sessionId: {}, path: {}, target: {}", sessionId, path, target);
@@ -71,7 +71,7 @@ public class SftpMoveHandler extends AbstractTerminalHandler<SftpMoveRequest> {
extra.put(OperatorLogs.PATH, path);
extra.put(OperatorLogs.TARGET, target);
this.saveOperatorLog(payload, channel,
extra, HostTerminalOperatorType.SFTP_MOVE,
extra, TerminalOperatorType.SFTP_MOVE,
startTime, ex);
}

View File

@@ -18,7 +18,7 @@ package com.orion.visor.module.asset.handler.host.terminal.handler;
import com.orion.lang.utils.collect.Maps;
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
import com.orion.visor.framework.common.enums.BooleanBit;
import com.orion.visor.module.asset.define.operator.HostTerminalOperatorType;
import com.orion.visor.module.asset.define.operator.TerminalOperatorType;
import com.orion.visor.module.asset.handler.host.terminal.enums.OutputTypeEnum;
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
import com.orion.visor.module.asset.handler.host.terminal.model.response.SftpBaseResponse;
@@ -47,7 +47,7 @@ public class SftpRemoveHandler extends AbstractTerminalHandler<SftpBaseRequest>
String path = payload.getPath();
String sessionId = payload.getSessionId();
// 获取会话
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
String[] paths = path.split("\\|");
log.info("SftpRemoveHandler-handle start sessionId: {}, path: {}", sessionId, Arrays.toString(paths));
Exception ex = null;
@@ -71,7 +71,7 @@ public class SftpRemoveHandler extends AbstractTerminalHandler<SftpBaseRequest>
Map<String, Object> extra = Maps.newMap();
extra.put(OperatorLogs.PATH, path);
this.saveOperatorLog(payload, channel,
extra, HostTerminalOperatorType.SFTP_REMOVE,
extra, TerminalOperatorType.SFTP_REMOVE,
startTime, ex);
}

View File

@@ -20,8 +20,8 @@ import com.orion.lang.utils.collect.Maps;
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
import com.orion.visor.framework.common.enums.BooleanBit;
import com.orion.visor.framework.redis.core.utils.RedisStrings;
import com.orion.visor.module.asset.define.cache.HostTerminalCacheKeyDefine;
import com.orion.visor.module.asset.define.operator.HostTerminalOperatorType;
import com.orion.visor.module.asset.define.cache.TerminalCacheKeyDefine;
import com.orion.visor.module.asset.define.operator.TerminalOperatorType;
import com.orion.visor.module.asset.entity.dto.SftpSetContentCacheDTO;
import com.orion.visor.module.asset.handler.host.terminal.enums.OutputTypeEnum;
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
@@ -49,7 +49,7 @@ public class SftpSetContentHandler extends AbstractTerminalHandler<SftpBaseReque
long startTime = System.currentTimeMillis();
// 获取会话
String sessionId = payload.getSessionId();
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
String path = payload.getPath();
log.info("SftpSetContentHandler-handle start sessionId: {}, path: {}", sessionId, path);
String token = UUIds.random32();
@@ -58,12 +58,12 @@ public class SftpSetContentHandler extends AbstractTerminalHandler<SftpBaseReque
// 检查文件是否可编辑
session.checkCanEdit(path);
// 设置缓存
String key = HostTerminalCacheKeyDefine.SFTP_SET_CONTENT.format(token);
String key = TerminalCacheKeyDefine.TERMINAL_SFTP_SET_CONTENT.format(token);
SftpSetContentCacheDTO cache = SftpSetContentCacheDTO.builder()
.hostId(session.getConfig().getHostId())
.path(path)
.build();
RedisStrings.setJson(key, HostTerminalCacheKeyDefine.SFTP_SET_CONTENT, cache);
RedisStrings.setJson(key, TerminalCacheKeyDefine.TERMINAL_SFTP_SET_CONTENT, cache);
log.info("SftpSetContentHandler-handle success sessionId: {}, path: {}", sessionId, path);
} catch (Exception e) {
log.error("SftpSetContentHandler-handle error sessionId: {}", sessionId, e);
@@ -82,7 +82,7 @@ public class SftpSetContentHandler extends AbstractTerminalHandler<SftpBaseReque
Map<String, Object> extra = Maps.newMap();
extra.put(OperatorLogs.PATH, path);
this.saveOperatorLog(payload, channel,
extra, HostTerminalOperatorType.SFTP_SET_CONTENT,
extra, TerminalOperatorType.SFTP_SET_CONTENT,
startTime, ex);
}

View File

@@ -18,7 +18,7 @@ package com.orion.visor.module.asset.handler.host.terminal.handler;
import com.orion.lang.utils.collect.Maps;
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
import com.orion.visor.framework.common.enums.BooleanBit;
import com.orion.visor.module.asset.define.operator.HostTerminalOperatorType;
import com.orion.visor.module.asset.define.operator.TerminalOperatorType;
import com.orion.visor.module.asset.handler.host.terminal.enums.OutputTypeEnum;
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
import com.orion.visor.module.asset.handler.host.terminal.model.response.SftpBaseResponse;
@@ -45,7 +45,7 @@ public class SftpTouchHandler extends AbstractTerminalHandler<SftpBaseRequest> {
long startTime = System.currentTimeMillis();
// 获取会话
String sessionId = payload.getSessionId();
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
String path = payload.getPath();
log.info("SftpTouchHandler-handle start sessionId: {}, path: {}", sessionId, path);
Exception ex = null;
@@ -69,7 +69,7 @@ public class SftpTouchHandler extends AbstractTerminalHandler<SftpBaseRequest> {
Map<String, Object> extra = Maps.newMap();
extra.put(OperatorLogs.PATH, path);
this.saveOperatorLog(payload, channel,
extra, HostTerminalOperatorType.SFTP_TOUCH,
extra, TerminalOperatorType.SFTP_TOUCH,
startTime, ex);
}

View File

@@ -18,7 +18,7 @@ package com.orion.visor.module.asset.handler.host.terminal.handler;
import com.orion.lang.utils.collect.Maps;
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
import com.orion.visor.framework.common.enums.BooleanBit;
import com.orion.visor.module.asset.define.operator.HostTerminalOperatorType;
import com.orion.visor.module.asset.define.operator.TerminalOperatorType;
import com.orion.visor.module.asset.handler.host.terminal.enums.OutputTypeEnum;
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
import com.orion.visor.module.asset.handler.host.terminal.model.response.SftpBaseResponse;
@@ -45,7 +45,7 @@ public class SftpTruncateHandler extends AbstractTerminalHandler<SftpBaseRequest
long startTime = System.currentTimeMillis();
// 获取会话
String sessionId = payload.getSessionId();
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
String path = payload.getPath();
log.info("SftpTruncateHandler-handle start sessionId: {}, path: {}", sessionId, path);
Exception ex = null;
@@ -69,7 +69,7 @@ public class SftpTruncateHandler extends AbstractTerminalHandler<SftpBaseRequest
Map<String, Object> extra = Maps.newMap();
extra.put(OperatorLogs.PATH, path);
this.saveOperatorLog(payload, channel,
extra, HostTerminalOperatorType.SFTP_TRUNCATE,
extra, TerminalOperatorType.SFTP_TRUNCATE,
startTime, ex);
}

View File

@@ -35,7 +35,7 @@ public class SshInputHandler extends AbstractTerminalHandler<SshInputRequest> {
@Override
public void handle(WebSocketSession channel, SshInputRequest payload) {
// 获取会话
ISshSession session = hostTerminalManager.getSession(channel.getId(), payload.getSessionId());
ISshSession session = terminalManager.getSession(channel.getId(), payload.getSessionId());
// 处理输入
session.write(payload.getCommand());
}

View File

@@ -35,7 +35,7 @@ public class SshResizeHandler extends AbstractTerminalHandler<SshResizeRequest>
@Override
public void handle(WebSocketSession channel, SshResizeRequest payload) {
// 获取会话
ISshSession session = hostTerminalManager.getSession(channel.getId(), payload.getSessionId());
ISshSession session = terminalManager.getSession(channel.getId(), payload.getSessionId());
// 修改大小
session.resize(payload.getCols(), payload.getRows());
}

View File

@@ -27,10 +27,10 @@ import com.orion.visor.framework.common.constant.ExtraFieldConst;
import com.orion.visor.framework.common.enums.BooleanBit;
import com.orion.visor.framework.websocket.core.utils.WebSockets;
import com.orion.visor.module.asset.dao.HostDAO;
import com.orion.visor.module.asset.define.operator.HostTerminalOperatorType;
import com.orion.visor.module.asset.define.operator.TerminalOperatorType;
import com.orion.visor.module.asset.entity.domain.TerminalConnectLogDO;
import com.orion.visor.module.asset.entity.domain.HostDO;
import com.orion.visor.module.asset.entity.dto.HostTerminalConnectDTO;
import com.orion.visor.module.asset.entity.dto.TerminalConnectDTO;
import com.orion.visor.module.asset.entity.request.host.TerminalConnectLogCreateRequest;
import com.orion.visor.module.asset.enums.TerminalConnectStatusEnum;
import com.orion.visor.module.asset.enums.TerminalConnectTypeEnum;
@@ -91,7 +91,7 @@ public class TerminalCheckHandler extends AbstractTerminalHandler<TerminalCheckR
log.info("TerminalCheckHandler-handle unknown host userId: {}, hostId: {}, sessionId: {}", userId, hostId, sessionId);
return;
}
HostTerminalConnectDTO connect = null;
TerminalConnectDTO connect = null;
Exception ex = null;
try {
// 获取连接信息
@@ -133,7 +133,7 @@ public class TerminalCheckHandler extends AbstractTerminalHandler<TerminalCheckR
* @return 是否存在
*/
private boolean checkSession(WebSocketSession channel, TerminalCheckRequest payload) {
ITerminalSession session = hostTerminalManager.getSession(channel.getId(), payload.getSessionId());
ITerminalSession session = terminalManager.getSession(channel.getId(), payload.getSessionId());
if (session != null) {
this.sendCheckFailedMessage(channel, payload, ErrorMessage.SESSION_PRESENT);
return true;
@@ -207,7 +207,7 @@ public class TerminalCheckHandler extends AbstractTerminalHandler<TerminalCheckR
extra.put(OperatorLogs.SESSION_ID, sessionId);
// 日志参数
OperatorLogModel logModel = TerminalUtils.getOperatorLogModel(channel, extra,
HostTerminalOperatorType.CONNECT, startTime, ex);
TerminalOperatorType.CONNECT, startTime, ex);
// 记录操作日志
operatorLogFrameworkService.insert(logModel);
// 记录连接日志

View File

@@ -35,7 +35,7 @@ public class TerminalCloseHandler extends AbstractTerminalHandler<TerminalBasePa
public void handle(WebSocketSession channel, TerminalBasePayload payload) {
log.info("TerminalCloseHandler-handle start sessionId: {}", payload.getSessionId());
// 关闭会话
hostTerminalManager.closeSession(channel.getId(), payload.getSessionId());
terminalManager.closeSession(channel.getId(), payload.getSessionId());
}
}

View File

@@ -26,7 +26,7 @@ import com.orion.visor.framework.common.constant.ErrorMessage;
import com.orion.visor.framework.common.constant.ExtraFieldConst;
import com.orion.visor.framework.common.enums.BooleanBit;
import com.orion.visor.framework.websocket.core.utils.WebSockets;
import com.orion.visor.module.asset.entity.dto.HostTerminalConnectDTO;
import com.orion.visor.module.asset.entity.dto.TerminalConnectDTO;
import com.orion.visor.module.asset.enums.TerminalConnectStatusEnum;
import com.orion.visor.module.asset.enums.TerminalConnectTypeEnum;
import com.orion.visor.module.asset.handler.host.jsch.SessionStores;
@@ -65,7 +65,7 @@ public class TerminalConnectHandler extends AbstractTerminalHandler<TerminalConn
String sessionId = payload.getSessionId();
log.info("TerminalConnectHandler-handle start sessionId: {}", sessionId);
// 获取终端连接信息
HostTerminalConnectDTO connect = WebSockets.getAttr(channel, sessionId);
TerminalConnectDTO connect = WebSockets.getAttr(channel, sessionId);
if (connect == null) {
log.info("TerminalConnectHandler-handle unknown sessionId: {}", sessionId);
this.send(channel,
@@ -85,7 +85,7 @@ public class TerminalConnectHandler extends AbstractTerminalHandler<TerminalConn
// 连接主机
session = this.connect(sessionId, connect, channel, payload);
// 添加会话到 manager
hostTerminalManager.addSession(session);
terminalManager.addSession(session);
} catch (Exception e) {
ex = e;
Streams.close(session);
@@ -114,7 +114,7 @@ public class TerminalConnectHandler extends AbstractTerminalHandler<TerminalConn
* @return channel
*/
private ITerminalSession connect(String sessionId,
HostTerminalConnectDTO connect,
TerminalConnectDTO connect,
WebSocketSession channel,
TerminalConnectRequest body) {
String connectType = connect.getConnectType();

View File

@@ -41,7 +41,7 @@ public class TerminalPingHandler extends AbstractTerminalHandler<TerminalBasePay
// 发送 pong
this.send(channel, OutputTypeEnum.PONG.getType());
// 活跃 terminal
Map<String, ITerminalSession> sessions = hostTerminalManager.getSession(channel.getId());
Map<String, ITerminalSession> sessions = terminalManager.getSession(channel.getId());
if (!Maps.isEmpty(sessions)) {
for (ITerminalSession session : sessions.values()) {
session.keepAlive();

View File

@@ -25,14 +25,14 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 主机终端管理器
* 终端管理器
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/1/3 11:35
*/
@Component
public class HostTerminalManager {
public class TerminalManager {
/**
* 会话存储器

View File

@@ -21,7 +21,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 主机终端连接参数
* 终端连接参数
*
* @author Jiahang Li
* @version 1.0.0

View File

@@ -21,7 +21,7 @@ import com.orion.net.host.SessionStore;
import com.orion.spring.SpringHolder;
import com.orion.visor.framework.common.constant.ExtraFieldConst;
import com.orion.visor.framework.websocket.core.utils.WebSockets;
import com.orion.visor.module.asset.entity.dto.HostTerminalConnectDTO;
import com.orion.visor.module.asset.entity.dto.TerminalConnectDTO;
import com.orion.visor.module.asset.handler.host.jsch.SessionStores;
import com.orion.visor.module.asset.handler.host.transfer.enums.TransferOperator;
import com.orion.visor.module.asset.handler.host.transfer.enums.TransferReceiver;
@@ -110,12 +110,12 @@ public class TransferHandler implements ITransferHandler {
if (terminalConnection == null) {
// 获取终端连接信息
Long userId = WebSockets.getAttr(channel, ExtraFieldConst.USER_ID);
HostTerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(userId, hostId);
TerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(userId, hostId);
terminalConnection = new TerminalConnection(connectInfo, SessionStores.openSessionStore(connectInfo));
terminalConnections.put(hostId, terminalConnection);
}
SessionStore sessionStore = terminalConnection.getSessionStore();
HostTerminalConnectDTO connectInfo = terminalConnection.getConnectInfo();
TerminalConnectDTO connectInfo = terminalConnection.getConnectInfo();
// 获取会话
ITransferSession session = sessions.get(sessionKey);
if (session == null) {

View File

@@ -16,7 +16,7 @@
package com.orion.visor.module.asset.handler.host.transfer.model;
import com.orion.net.host.SessionStore;
import com.orion.visor.module.asset.entity.dto.HostTerminalConnectDTO;
import com.orion.visor.module.asset.entity.dto.TerminalConnectDTO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -38,7 +38,7 @@ public class TerminalConnection {
/**
* connectInfo
*/
private HostTerminalConnectDTO connectInfo;
private TerminalConnectDTO connectInfo;
/**
* sessionStore

View File

@@ -24,8 +24,8 @@ import com.orion.net.host.sftp.SftpFile;
import com.orion.visor.framework.common.constant.Const;
import com.orion.visor.framework.common.constant.ErrorMessage;
import com.orion.visor.module.asset.define.AssetThreadPools;
import com.orion.visor.module.asset.define.operator.HostTerminalOperatorType;
import com.orion.visor.module.asset.entity.dto.HostTerminalConnectDTO;
import com.orion.visor.module.asset.define.operator.TerminalOperatorType;
import com.orion.visor.module.asset.entity.dto.TerminalConnectDTO;
import com.orion.visor.module.asset.handler.host.transfer.enums.TransferReceiver;
import com.orion.visor.module.asset.handler.host.transfer.model.TransferOperatorRequest;
import com.orion.visor.module.asset.handler.host.transfer.utils.TransferUtils;
@@ -54,7 +54,7 @@ public class DownloadSession extends TransferSession implements StreamingRespons
private Long fileSize;
public DownloadSession(HostTerminalConnectDTO connectInfo, SessionStore sessionStore, WebSocketSession channel) {
public DownloadSession(TerminalConnectDTO connectInfo, SessionStore sessionStore, WebSocketSession channel) {
super(connectInfo, sessionStore, channel);
this.fileSize = 0L;
}
@@ -65,7 +65,7 @@ public class DownloadSession extends TransferSession implements StreamingRespons
super.onStart(request);
log.info("DownloadSession.startDownload open start channelId: {}, path: {}", channelId, path);
// 保存操作日志
this.saveOperatorLog(HostTerminalOperatorType.SFTP_DOWNLOAD, path);
this.saveOperatorLog(TerminalOperatorType.SFTP_DOWNLOAD, path);
// 检查连接
this.init();
// 检查文件是否存在

View File

@@ -25,7 +25,7 @@ import com.orion.visor.framework.biz.operator.log.core.model.OperatorLogModel;
import com.orion.visor.framework.biz.operator.log.core.service.OperatorLogFrameworkService;
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
import com.orion.visor.module.asset.define.config.AppSftpConfig;
import com.orion.visor.module.asset.entity.dto.HostTerminalConnectDTO;
import com.orion.visor.module.asset.entity.dto.TerminalConnectDTO;
import com.orion.visor.module.asset.handler.host.terminal.utils.TerminalUtils;
import com.orion.visor.module.asset.handler.host.transfer.enums.TransferReceiver;
import com.orion.visor.module.asset.handler.host.transfer.model.TransferOperatorRequest;
@@ -49,7 +49,7 @@ public abstract class TransferSession implements ITransferSession {
protected static final AppSftpConfig SFTP_CONFIG = SpringHolder.getBean(AppSftpConfig.class);
protected final HostTerminalConnectDTO connectInfo;
protected final TerminalConnectDTO connectInfo;
protected final SessionStore sessionStore;
@@ -66,7 +66,7 @@ public abstract class TransferSession implements ITransferSession {
@Setter
protected String token;
public TransferSession(HostTerminalConnectDTO connectInfo, SessionStore sessionStore, WebSocketSession channel) {
public TransferSession(TerminalConnectDTO connectInfo, SessionStore sessionStore, WebSocketSession channel) {
this.connectInfo = connectInfo;
this.sessionStore = sessionStore;
this.channel = channel;

View File

@@ -17,8 +17,8 @@ package com.orion.visor.module.asset.handler.host.transfer.session;
import com.orion.lang.utils.io.Streams;
import com.orion.net.host.SessionStore;
import com.orion.visor.module.asset.define.operator.HostTerminalOperatorType;
import com.orion.visor.module.asset.entity.dto.HostTerminalConnectDTO;
import com.orion.visor.module.asset.define.operator.TerminalOperatorType;
import com.orion.visor.module.asset.entity.dto.TerminalConnectDTO;
import com.orion.visor.module.asset.handler.host.transfer.enums.TransferReceiver;
import com.orion.visor.module.asset.handler.host.transfer.model.TransferOperatorRequest;
import com.orion.visor.module.asset.handler.host.transfer.utils.TransferUtils;
@@ -41,7 +41,7 @@ public class UploadSession extends TransferSession {
protected OutputStream outputStream;
public UploadSession(HostTerminalConnectDTO connectInfo, SessionStore sessionStore, WebSocketSession channel) {
public UploadSession(TerminalConnectDTO connectInfo, SessionStore sessionStore, WebSocketSession channel) {
super(connectInfo, sessionStore, channel);
}
@@ -51,7 +51,7 @@ public class UploadSession extends TransferSession {
try {
log.info("UploadSession.startUpload start channelId: {}, path: {}", channelId, path);
// 保存操作日志
this.saveOperatorLog(HostTerminalOperatorType.SFTP_UPLOAD, path);
this.saveOperatorLog(TerminalOperatorType.SFTP_UPLOAD, path);
// 检查连接
this.init();
// 检查文件是否存在

View File

@@ -25,7 +25,7 @@ import com.orion.visor.framework.common.file.FileClient;
import com.orion.visor.module.asset.dao.UploadTaskFileDAO;
import com.orion.visor.module.asset.define.config.AppSftpConfig;
import com.orion.visor.module.asset.entity.domain.UploadTaskFileDO;
import com.orion.visor.module.asset.entity.dto.HostTerminalConnectDTO;
import com.orion.visor.module.asset.entity.dto.TerminalConnectDTO;
import com.orion.visor.module.asset.enums.UploadTaskFileStatusEnum;
import com.orion.visor.module.asset.handler.host.jsch.SessionStores;
import com.orion.visor.module.asset.handler.host.upload.model.FileUploadFileItemDTO;
@@ -116,7 +116,7 @@ public class FileUploader implements IFileUploader {
log.info("HostFileUploader.initSession start taskId: {}, hostId: {}", taskId, hostId);
try {
// 打开会话
HostTerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(hostId);
TerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(hostId);
this.sessionStore = SessionStores.openSessionStore(connectInfo);
this.executor = sessionStore.getSftpExecutor(connectInfo.getFileNameCharset());
executor.connect();

View File

@@ -19,7 +19,7 @@ import com.orion.lang.utils.Urls;
import com.orion.visor.framework.common.constant.ExtraFieldConst;
import com.orion.visor.framework.common.meta.TraceIdHolder;
import com.orion.visor.framework.common.utils.Requests;
import com.orion.visor.module.asset.entity.dto.HostTerminalAccessDTO;
import com.orion.visor.module.asset.entity.dto.TerminalAccessDTO;
import com.orion.visor.module.asset.service.TerminalService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.server.ServerHttpRequest;
@@ -51,7 +51,7 @@ public class TerminalAccessInterceptor implements HandshakeInterceptor {
String accessToken = Urls.getUrlSource(request.getURI().getPath());
log.info("TerminalAccessInterceptor-beforeHandshake start accessToken: {}", accessToken);
// 获取连接数据
HostTerminalAccessDTO access = terminalService.getAccessInfoByToken(accessToken);
TerminalAccessDTO access = terminalService.getAccessInfoByToken(accessToken);
if (access == null) {
log.error("TerminalAccessInterceptor-beforeHandshake absent accessToken: {}", accessToken);
return false;

View File

@@ -19,7 +19,7 @@ import com.orion.lang.utils.Urls;
import com.orion.visor.framework.common.constant.ExtraFieldConst;
import com.orion.visor.framework.common.meta.TraceIdHolder;
import com.orion.visor.framework.common.utils.Requests;
import com.orion.visor.module.asset.entity.dto.HostTerminalTransferDTO;
import com.orion.visor.module.asset.entity.dto.TerminalTransferDTO;
import com.orion.visor.module.asset.service.TerminalService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.server.ServerHttpRequest;
@@ -51,7 +51,7 @@ public class TerminalTransferInterceptor implements HandshakeInterceptor {
String transferToken = Urls.getUrlSource(request.getURI().getPath());
log.info("TerminalTransferInterceptor-beforeHandshake start transferToken: {}", transferToken);
// 获取连接数据
HostTerminalTransferDTO transfer = terminalService.getTransferInfoByToken(transferToken);
TerminalTransferDTO transfer = terminalService.getTransferInfoByToken(transferToken);
if (transfer == null) {
log.error("TerminalTransferInterceptor-beforeHandshake absent transferToken: {}", transferToken);
return false;

View File

@@ -16,15 +16,15 @@
package com.orion.visor.module.asset.service;
import com.orion.visor.module.asset.entity.domain.HostDO;
import com.orion.visor.module.asset.entity.dto.HostTerminalAccessDTO;
import com.orion.visor.module.asset.entity.dto.HostTerminalConnectDTO;
import com.orion.visor.module.asset.entity.dto.HostTerminalTransferDTO;
import com.orion.visor.module.asset.entity.vo.HostTerminalThemeVO;
import com.orion.visor.module.asset.entity.dto.TerminalAccessDTO;
import com.orion.visor.module.asset.entity.dto.TerminalConnectDTO;
import com.orion.visor.module.asset.entity.dto.TerminalTransferDTO;
import com.orion.visor.module.asset.entity.vo.TerminalThemeVO;
import java.util.List;
/**
* 主机终端服务
* 终端服务
*
* @author Jiahang Li
* @version 1.0.0
@@ -37,7 +37,7 @@ public interface TerminalService {
*
* @return themes
*/
List<HostTerminalThemeVO> getTerminalThemes();
List<TerminalThemeVO> getTerminalThemes();
/**
* 获取主机终端访问 accessToken
@@ -54,20 +54,20 @@ public interface TerminalService {
String getTerminalTransferToken();
/**
* 通过 accessToken 获取主机终端访问信息
* 通过 accessToken 获取终端访问信息
*
* @param token token
* @return config
*/
HostTerminalAccessDTO getAccessInfoByToken(String token);
TerminalAccessDTO getAccessInfoByToken(String token);
/**
* 通过 transferToken 获取主机终端传输信息
* 通过 transferToken 获取终端传输信息
*
* @param token token
* @return config
*/
HostTerminalTransferDTO getTransferInfoByToken(String token);
TerminalTransferDTO getTransferInfoByToken(String token);
/**
* 获取连接信息
@@ -75,7 +75,7 @@ public interface TerminalService {
* @param hostId hostId
* @return session
*/
HostTerminalConnectDTO getTerminalConnectInfo(Long hostId);
TerminalConnectDTO getTerminalConnectInfo(Long hostId);
/**
* 使用用户配置获取连接信息
@@ -84,7 +84,7 @@ public interface TerminalService {
* @param userId userId
* @return session
*/
HostTerminalConnectDTO getTerminalConnectInfo(Long userId, Long hostId);
TerminalConnectDTO getTerminalConnectInfo(Long userId, Long hostId);
/**
* 使用用户配置获取连接信息
@@ -93,6 +93,6 @@ public interface TerminalService {
* @param userId userId
* @return session
*/
HostTerminalConnectDTO getTerminalConnectInfo(Long userId, HostDO host);
TerminalConnectDTO getTerminalConnectInfo(Long userId, HostDO host);
}

View File

@@ -35,9 +35,9 @@ import com.orion.visor.framework.common.constant.ExtraFieldConst;
import com.orion.visor.framework.redis.core.utils.RedisStrings;
import com.orion.visor.framework.security.core.utils.SecurityUtils;
import com.orion.visor.module.asset.convert.HostSftpLogConvert;
import com.orion.visor.module.asset.define.cache.HostTerminalCacheKeyDefine;
import com.orion.visor.module.asset.define.operator.HostTerminalOperatorType;
import com.orion.visor.module.asset.entity.dto.HostTerminalConnectDTO;
import com.orion.visor.module.asset.define.cache.TerminalCacheKeyDefine;
import com.orion.visor.module.asset.define.operator.TerminalOperatorType;
import com.orion.visor.module.asset.entity.dto.TerminalConnectDTO;
import com.orion.visor.module.asset.entity.dto.SftpGetContentCacheDTO;
import com.orion.visor.module.asset.entity.dto.SftpSetContentCacheDTO;
import com.orion.visor.module.asset.entity.request.host.HostSftpLogQueryRequest;
@@ -117,8 +117,8 @@ public class HostSftpServiceImpl implements HostSftpService {
@Override
public void getFileContentByToken(String token, HttpServletResponse response) throws IOException {
// 解析 token
String key = HostTerminalCacheKeyDefine.SFTP_GET_CONTENT.format(token);
SftpGetContentCacheDTO cache = RedisStrings.getJson(key, HostTerminalCacheKeyDefine.SFTP_GET_CONTENT);
String key = TerminalCacheKeyDefine.TERMINAL_SFTP_GET_CONTENT.format(token);
SftpGetContentCacheDTO cache = RedisStrings.getJson(key, TerminalCacheKeyDefine.TERMINAL_SFTP_GET_CONTENT);
if (cache == null) {
Servlets.writeHttpWrapper(response, HttpWrapper.error(ErrorMessage.FILE_ABSENT));
return;
@@ -131,7 +131,7 @@ public class HostSftpServiceImpl implements HostSftpService {
InputStream in = null;
try {
// 获取终端连接信息
HostTerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(SecurityUtils.getLoginUserId(), cache.getHostId());
TerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(SecurityUtils.getLoginUserId(), cache.getHostId());
sessionStore = SessionStores.openSessionStore(connectInfo);
executor = sessionStore.getSftpExecutor(connectInfo.getFileNameCharset());
executor.connect();
@@ -152,8 +152,8 @@ public class HostSftpServiceImpl implements HostSftpService {
@Override
public void setFileContentByToken(String token, MultipartFile file) {
// 解析 token
String key = HostTerminalCacheKeyDefine.SFTP_SET_CONTENT.format(token);
SftpSetContentCacheDTO cache = RedisStrings.getJson(key, HostTerminalCacheKeyDefine.SFTP_SET_CONTENT);
String key = TerminalCacheKeyDefine.TERMINAL_SFTP_SET_CONTENT.format(token);
SftpSetContentCacheDTO cache = RedisStrings.getJson(key, TerminalCacheKeyDefine.TERMINAL_SFTP_SET_CONTENT);
Valid.notNull(cache, ErrorMessage.FILE_ABSENT);
// 删除缓存
RedisStrings.delete(key);
@@ -164,7 +164,7 @@ public class HostSftpServiceImpl implements HostSftpService {
InputStream in = null;
try {
// 获取终端连接信息
HostTerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(SecurityUtils.getLoginUserId(), cache.getHostId());
TerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(SecurityUtils.getLoginUserId(), cache.getHostId());
sessionStore = SessionStores.openSessionStore(connectInfo);
executor = sessionStore.getSftpExecutor(connectInfo.getFileNameCharset());
executor.connect();
@@ -220,7 +220,7 @@ public class HostSftpServiceImpl implements HostSftpService {
query.setLimit(request.getLimit());
if (Strings.isBlank(type)) {
// 查询全部 SFTP 类型
query.setTypeList(HostTerminalOperatorType.SFTP_TYPES);
query.setTypeList(TerminalOperatorType.SFTP_TYPES);
} else {
query.setType(type);
}

View File

@@ -36,7 +36,7 @@ import com.orion.visor.module.asset.entity.request.host.TerminalConnectLogQueryR
import com.orion.visor.module.asset.entity.vo.TerminalConnectLogVO;
import com.orion.visor.module.asset.enums.TerminalConnectStatusEnum;
import com.orion.visor.module.asset.enums.TerminalConnectTypeEnum;
import com.orion.visor.module.asset.handler.host.terminal.manager.HostTerminalManager;
import com.orion.visor.module.asset.handler.host.terminal.manager.TerminalManager;
import com.orion.visor.module.asset.handler.host.terminal.model.TerminalConfig;
import com.orion.visor.module.asset.handler.host.terminal.session.ITerminalSession;
import com.orion.visor.module.asset.service.TerminalConnectLogService;
@@ -67,7 +67,7 @@ public class TerminalConnectLogServiceImpl implements TerminalConnectLogService
private TerminalConnectLogDAO terminalConnectLogDAO;
@Resource
private HostTerminalManager hostTerminalManager;
private TerminalManager terminalManager;
@Override
public TerminalConnectLogDO create(TerminalConnectTypeEnum type, TerminalConnectLogCreateRequest request) {
@@ -103,7 +103,7 @@ public class TerminalConnectLogServiceImpl implements TerminalConnectLogService
@Override
public List<TerminalConnectLogVO> getTerminalConnectSessions(TerminalConnectLogQueryRequest request) {
// 查询全部
List<Long> idList = hostTerminalManager.getChannelSessions()
List<Long> idList = terminalManager.getChannelSessions()
.values()
.stream()
.map(ConcurrentHashMap::values)
@@ -246,7 +246,7 @@ public class TerminalConnectLogServiceImpl implements TerminalConnectLogService
OperatorLogs.add(OperatorLogs.HOST_NAME, record.getHostName());
// 获取会话
TerminalConnectLogExtraDTO extra = JSON.parseObject(record.getExtraInfo(), TerminalConnectLogExtraDTO.class);
ITerminalSession session = hostTerminalManager.getSession(extra.getChannelId(), extra.getSessionId());
ITerminalSession session = terminalManager.getSession(extra.getChannelId(), extra.getSessionId());
if (session != null) {
// 关闭会话
session.forceOffline();

View File

@@ -26,14 +26,14 @@ import com.orion.visor.framework.security.core.utils.SecurityUtils;
import com.orion.visor.module.asset.dao.HostDAO;
import com.orion.visor.module.asset.dao.HostIdentityDAO;
import com.orion.visor.module.asset.dao.HostKeyDAO;
import com.orion.visor.module.asset.define.cache.HostTerminalCacheKeyDefine;
import com.orion.visor.module.asset.define.cache.TerminalCacheKeyDefine;
import com.orion.visor.module.asset.entity.domain.HostDO;
import com.orion.visor.module.asset.entity.domain.HostIdentityDO;
import com.orion.visor.module.asset.entity.domain.HostKeyDO;
import com.orion.visor.module.asset.entity.dto.HostTerminalAccessDTO;
import com.orion.visor.module.asset.entity.dto.HostTerminalConnectDTO;
import com.orion.visor.module.asset.entity.dto.HostTerminalTransferDTO;
import com.orion.visor.module.asset.entity.vo.HostTerminalThemeVO;
import com.orion.visor.module.asset.entity.dto.TerminalAccessDTO;
import com.orion.visor.module.asset.entity.dto.TerminalConnectDTO;
import com.orion.visor.module.asset.entity.dto.TerminalTransferDTO;
import com.orion.visor.module.asset.entity.vo.TerminalThemeVO;
import com.orion.visor.module.asset.enums.*;
import com.orion.visor.module.asset.handler.host.config.model.HostSshConfigModel;
import com.orion.visor.module.asset.handler.host.extra.model.HostSshExtraModel;
@@ -89,14 +89,14 @@ public class TerminalServiceImpl implements TerminalService {
private DictValueApi dictValueApi;
@Override
public List<HostTerminalThemeVO> getTerminalThemes() {
public List<TerminalThemeVO> getTerminalThemes() {
// if (true) {
// String arr = "";
// return JSON.parseArray(arr, HostTerminalThemeVO.class);
// }
List<JSONObject> themes = dictValueApi.getDictValue(THEME_DICT_KEY);
return themes.stream()
.map(s -> HostTerminalThemeVO.builder()
.map(s -> TerminalThemeVO.builder()
.name(s.getString(ExtraFieldConst.LABEL))
.dark(s.getBoolean(ExtraFieldConst.DARK))
.schema(s.getJSONObject(ExtraFieldConst.VALUE))
@@ -109,13 +109,13 @@ public class TerminalServiceImpl implements TerminalService {
LoginUser user = Valid.notNull(SecurityUtils.getLoginUser());
log.info("HostTerminalService.getTerminalAccessToken userId: {}", user.getId());
String accessToken = UUIds.random19();
HostTerminalAccessDTO access = HostTerminalAccessDTO.builder()
TerminalAccessDTO access = TerminalAccessDTO.builder()
.userId(user.getId())
.username(user.getUsername())
.build();
// 设置 access 缓存
String key = HostTerminalCacheKeyDefine.HOST_TERMINAL_ACCESS.format(accessToken);
RedisStrings.setJson(key, HostTerminalCacheKeyDefine.HOST_TERMINAL_ACCESS, access);
String key = TerminalCacheKeyDefine.TERMINAL_ACCESS.format(accessToken);
RedisStrings.setJson(key, TerminalCacheKeyDefine.TERMINAL_ACCESS, access);
return accessToken;
}
@@ -124,21 +124,21 @@ public class TerminalServiceImpl implements TerminalService {
LoginUser user = Valid.notNull(SecurityUtils.getLoginUser());
log.info("HostTerminalService.getTerminalTransferToken userId: {}", user.getId());
String transferToken = UUIds.random19();
HostTerminalTransferDTO transfer = HostTerminalTransferDTO.builder()
TerminalTransferDTO transfer = TerminalTransferDTO.builder()
.userId(user.getId())
.username(user.getUsername())
.build();
// 设置 transfer 缓存
String key = HostTerminalCacheKeyDefine.HOST_TERMINAL_TRANSFER.format(transferToken);
RedisStrings.setJson(key, HostTerminalCacheKeyDefine.HOST_TERMINAL_TRANSFER, transfer);
String key = TerminalCacheKeyDefine.TERMINAL_TRANSFER.format(transferToken);
RedisStrings.setJson(key, TerminalCacheKeyDefine.TERMINAL_TRANSFER, transfer);
return transferToken;
}
@Override
public HostTerminalAccessDTO getAccessInfoByToken(String token) {
public TerminalAccessDTO getAccessInfoByToken(String token) {
// 获取缓存
String key = HostTerminalCacheKeyDefine.HOST_TERMINAL_ACCESS.format(token);
HostTerminalAccessDTO access = RedisStrings.getJson(key, HostTerminalCacheKeyDefine.HOST_TERMINAL_ACCESS);
String key = TerminalCacheKeyDefine.TERMINAL_ACCESS.format(token);
TerminalAccessDTO access = RedisStrings.getJson(key, TerminalCacheKeyDefine.TERMINAL_ACCESS);
// 删除缓存
if (access != null) {
RedisStrings.delete(key);
@@ -147,10 +147,10 @@ public class TerminalServiceImpl implements TerminalService {
}
@Override
public HostTerminalTransferDTO getTransferInfoByToken(String token) {
public TerminalTransferDTO getTransferInfoByToken(String token) {
// 获取缓存
String key = HostTerminalCacheKeyDefine.HOST_TERMINAL_TRANSFER.format(token);
HostTerminalTransferDTO transfer = RedisStrings.getJson(key, HostTerminalCacheKeyDefine.HOST_TERMINAL_TRANSFER);
String key = TerminalCacheKeyDefine.TERMINAL_TRANSFER.format(token);
TerminalTransferDTO transfer = RedisStrings.getJson(key, TerminalCacheKeyDefine.TERMINAL_TRANSFER);
// 删除缓存
if (transfer != null) {
RedisStrings.delete(key);
@@ -159,7 +159,7 @@ public class TerminalServiceImpl implements TerminalService {
}
@Override
public HostTerminalConnectDTO getTerminalConnectInfo(Long hostId) {
public TerminalConnectDTO getTerminalConnectInfo(Long hostId) {
log.info("HostTerminalService.getTerminalConnectInfo-withHost hostId: {}", hostId);
// 查询主机
HostDO host = hostDAO.selectById(hostId);
@@ -170,7 +170,7 @@ public class TerminalServiceImpl implements TerminalService {
}
@Override
public HostTerminalConnectDTO getTerminalConnectInfo(Long userId, Long hostId) {
public TerminalConnectDTO getTerminalConnectInfo(Long userId, Long hostId) {
// 查询主机
HostDO host = hostDAO.selectById(hostId);
Valid.notNull(host, ErrorMessage.HOST_ABSENT);
@@ -179,7 +179,7 @@ public class TerminalServiceImpl implements TerminalService {
}
@Override
public HostTerminalConnectDTO getTerminalConnectInfo(Long userId, HostDO host) {
public TerminalConnectDTO getTerminalConnectInfo(Long userId, HostDO host) {
Long hostId = host.getId();
log.info("HostTerminalService.getTerminalConnectInfo hostId: {}, userId: {}", hostId, userId);
// 验证主机是否有权限
@@ -220,11 +220,11 @@ public class TerminalServiceImpl implements TerminalService {
* @param extra extra
* @return session
*/
private HostTerminalConnectDTO getHostConnectInfo(HostDO host,
HostSshConfigModel config,
HostSshExtraModel extra) {
private TerminalConnectDTO getHostConnectInfo(HostDO host,
HostSshConfigModel config,
HostSshExtraModel extra) {
// 填充认证信息
HostTerminalConnectDTO conn = new HostTerminalConnectDTO();
TerminalConnectDTO conn = new TerminalConnectDTO();
conn.setHostId(host.getId());
conn.setHostName(host.getName());
conn.setHostAddress(host.getAddress());

View File

@@ -44,7 +44,7 @@ public class TerminalConnectLogAutoClearTask {
/**
* 分布式锁名称
*/
private static final String LOCK_KEY = "clear:hcl:lock";
private static final String LOCK_KEY = "clear:tcl:lock";
@Resource
private AppTerminalConnectLogAutoClearConfig appTerminalConnectLogAutoClearConfig;

View File

@@ -61,13 +61,13 @@ export function getTerminalTransferToken() {
/**
* 打开终端 websocket
*/
export const openHostTerminalChannel = (accessToken: string) => {
return createAppWebSocket(`/host/terminal/${accessToken}`);
export const openTerminalAccessChannel = (accessToken: string) => {
return createAppWebSocket(`/terminal/access/${accessToken}`);
};
/**
* 打开终端传输 websocket
*/
export const openHostTransferChannel = (accessToken: string) => {
return createAppWebSocket(`/host/transfer/${accessToken}`);
export const openTerminalTransferChannel = (accessToken: string) => {
return createAppWebSocket(`/terminal/transfer/${accessToken}`);
};

View File

@@ -1,7 +1,7 @@
import type { ISftpTransferHandler, ISftpTransferManager, SftpFile, SftpTransferItem, TransferOperatorResponse } from '../types/define';
import { sessionCloseMsg, TransferReceiver, TransferStatus, TransferType } from '../types/const';
import { Message } from '@arco-design/web-vue';
import { getTerminalTransferToken, openHostTransferChannel } from '@/api/asset/terminal';
import { getTerminalTransferToken, openTerminalTransferChannel } from '@/api/asset/terminal';
import { nextId } from '@/utils';
import SftpTransferUploader from './sftp-transfer-uploader';
import SftpTransferDownloader from './sftp-transfer-downloader';
@@ -109,7 +109,7 @@ export default class SftpTransferManager implements ISftpTransferManager {
const { data: transferToken } = await getTerminalTransferToken();
// 打开会话
try {
this.client = await openHostTransferChannel(transferToken);
this.client = await openTerminalTransferChannel(transferToken);
} catch (e) {
// 打开失败将传输列表置为失效
Message.error('会话打开失败');

View File

@@ -2,7 +2,7 @@ import type { ITerminalChannel, ITerminalOutputProcessor, ITerminalSessionManage
import type { InputPayload, Protocol } from '@/types/protocol/terminal.protocol';
import { format, OutputProtocol, parse } from '@/types/protocol/terminal.protocol';
import { sessionCloseMsg } from '../types/const';
import { getTerminalAccessToken, openHostTerminalChannel } from '@/api/asset/terminal';
import { getTerminalAccessToken, openTerminalAccessChannel } from '@/api/asset/terminal';
import { Message } from '@arco-design/web-vue';
import TerminalOutputProcessor from './terminal-output-processor';
@@ -26,7 +26,7 @@ export default class TerminalChannel implements ITerminalChannel {
const { data: accessToken } = await getTerminalAccessToken();
// 打开会话
try {
this.client = await openHostTerminalChannel(accessToken);
this.client = await openTerminalAccessChannel(accessToken);
} catch (e) {
Message.error('无法连接至服务器');
console.error('terminal error', e);