⚡ 拆分模块.
This commit is contained in:
@@ -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("*");
|
||||
// 执行日志
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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)
|
||||
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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())) {
|
||||
// 上传脚本文件
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
// 记录连接日志
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 {
|
||||
|
||||
/**
|
||||
* 会话存储器
|
||||
@@ -21,7 +21,7 @@ import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 主机终端连接参数
|
||||
* 终端连接参数
|
||||
*
|
||||
* @author Jiahang Li
|
||||
* @version 1.0.0
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
// 检查文件是否存在
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
// 检查文件是否存在
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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}`);
|
||||
};
|
||||
|
||||
@@ -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('会话打开失败');
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user