⚡ 拆分模块.
This commit is contained in:
@@ -62,11 +62,11 @@ public class AssetWebSocketConfiguration implements WebSocketConfigurer {
|
|||||||
@Override
|
@Override
|
||||||
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
|
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
|
||||||
// 终端会话
|
// 终端会话
|
||||||
registry.addHandler(terminalMessageDispatcher, prefix + "/host/terminal/{accessToken}")
|
registry.addHandler(terminalMessageDispatcher, prefix + "/terminal/access/{accessToken}")
|
||||||
.addInterceptors(terminalAccessInterceptor)
|
.addInterceptors(terminalAccessInterceptor)
|
||||||
.setAllowedOrigins("*");
|
.setAllowedOrigins("*");
|
||||||
// 文件传输
|
// 文件传输
|
||||||
registry.addHandler(transferMessageDispatcher, prefix + "/host/transfer/{transferToken}")
|
registry.addHandler(transferMessageDispatcher, prefix + "/terminal/transfer/{transferToken}")
|
||||||
.addInterceptors(terminalTransferInterceptor)
|
.addInterceptors(terminalTransferInterceptor)
|
||||||
.setAllowedOrigins("*");
|
.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.log.core.enums.IgnoreLogMode;
|
||||||
import com.orion.visor.framework.web.core.annotation.IgnoreWrapper;
|
import com.orion.visor.framework.web.core.annotation.IgnoreWrapper;
|
||||||
import com.orion.visor.framework.web.core.annotation.RestWrapper;
|
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.request.host.HostSftpLogQueryRequest;
|
||||||
import com.orion.visor.module.asset.entity.vo.HostSftpLogVO;
|
import com.orion.visor.module.asset.entity.vo.HostSftpLogVO;
|
||||||
import com.orion.visor.module.asset.service.HostSftpService;
|
import com.orion.visor.module.asset.service.HostSftpService;
|
||||||
@@ -67,7 +67,7 @@ public class HostSftpLogController {
|
|||||||
return hostSftpService.getHostSftpLogPage(request);
|
return hostSftpService.getHostSftpLogPage(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
@OperatorLog(HostTerminalOperatorType.DELETE_SFTP_LOG)
|
@OperatorLog(TerminalOperatorType.DELETE_SFTP_LOG)
|
||||||
@DeleteMapping("/delete-log")
|
@DeleteMapping("/delete-log")
|
||||||
@Operation(summary = "删除 SFTP 操作日志")
|
@Operation(summary = "删除 SFTP 操作日志")
|
||||||
@Parameter(name = "idList", description = "idList", required = true)
|
@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.annotation.IgnoreLog;
|
||||||
import com.orion.visor.framework.log.core.enums.IgnoreLogMode;
|
import com.orion.visor.framework.log.core.enums.IgnoreLogMode;
|
||||||
import com.orion.visor.framework.web.core.annotation.RestWrapper;
|
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 com.orion.visor.module.asset.service.TerminalService;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
@@ -33,7 +33,7 @@ import javax.annotation.Resource;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 主机终端 api
|
* 终端 api
|
||||||
*
|
*
|
||||||
* @author Jiahang Li
|
* @author Jiahang Li
|
||||||
* @version 1.0.0
|
* @version 1.0.0
|
||||||
@@ -53,7 +53,7 @@ public class TerminalController {
|
|||||||
@IgnoreLog(IgnoreLogMode.ALL)
|
@IgnoreLog(IgnoreLogMode.ALL)
|
||||||
@GetMapping("/themes")
|
@GetMapping("/themes")
|
||||||
@Operation(summary = "获取终端主题")
|
@Operation(summary = "获取终端主题")
|
||||||
public List<HostTerminalThemeVO> getTerminalThemes() {
|
public List<TerminalThemeVO> getTerminalThemes() {
|
||||||
return terminalService.getTerminalThemes();
|
return terminalService.getTerminalThemes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
package com.orion.visor.module.asset.convert;
|
package com.orion.visor.module.asset.convert;
|
||||||
|
|
||||||
import com.orion.visor.module.asset.entity.domain.TerminalConnectLogDO;
|
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.TerminalConnectLogCreateRequest;
|
||||||
import com.orion.visor.module.asset.entity.request.host.TerminalConnectLogQueryRequest;
|
import com.orion.visor.module.asset.entity.request.host.TerminalConnectLogQueryRequest;
|
||||||
import com.orion.visor.module.asset.entity.vo.TerminalConnectLogVO;
|
import com.orion.visor.module.asset.entity.vo.TerminalConnectLogVO;
|
||||||
@@ -43,7 +43,7 @@ public interface TerminalConnectLogConvert {
|
|||||||
|
|
||||||
TerminalConnectLogVO to(TerminalConnectLogDO domain);
|
TerminalConnectLogVO to(TerminalConnectLogDO domain);
|
||||||
|
|
||||||
TerminalConnectLogCreateRequest to(HostTerminalConnectDTO dto);
|
TerminalConnectLogCreateRequest to(TerminalConnectDTO dto);
|
||||||
|
|
||||||
List<TerminalConnectLogVO> to(List<TerminalConnectLogDO> list);
|
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.CacheKeyBuilder;
|
||||||
import com.orion.lang.define.cache.key.CacheKeyDefine;
|
import com.orion.lang.define.cache.key.CacheKeyDefine;
|
||||||
import com.orion.lang.define.cache.key.struct.RedisCacheStruct;
|
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.SftpGetContentCacheDTO;
|
||||||
import com.orion.visor.module.asset.entity.dto.SftpSetContentCacheDTO;
|
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;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 主机终端服务缓存 key
|
* 终端服务缓存 key
|
||||||
*
|
*
|
||||||
* @author Jiahang Li
|
* @author Jiahang Li
|
||||||
* @version 1.0.0
|
* @version 1.0.0
|
||||||
* @since 2023/12/27 18:13
|
* @since 2023/12/27 18:13
|
||||||
*/
|
*/
|
||||||
public interface HostTerminalCacheKeyDefine {
|
public interface TerminalCacheKeyDefine {
|
||||||
|
|
||||||
CacheKeyDefine HOST_TERMINAL_ACCESS = new CacheKeyBuilder()
|
CacheKeyDefine TERMINAL_ACCESS = new CacheKeyBuilder()
|
||||||
.key("host:terminal:access:{}")
|
.key("terminal:access:{}")
|
||||||
.desc("主机终端访问token ${token}")
|
.desc("终端访问token ${token}")
|
||||||
.type(HostTerminalAccessDTO.class)
|
.type(TerminalAccessDTO.class)
|
||||||
.struct(RedisCacheStruct.STRING)
|
.struct(RedisCacheStruct.STRING)
|
||||||
.timeout(3, TimeUnit.MINUTES)
|
.timeout(3, TimeUnit.MINUTES)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
CacheKeyDefine HOST_TERMINAL_TRANSFER = new CacheKeyBuilder()
|
CacheKeyDefine TERMINAL_TRANSFER = new CacheKeyBuilder()
|
||||||
.key("host:terminal:transfer:{}")
|
.key("terminal:transfer:{}")
|
||||||
.desc("主机终端传输token ${token}")
|
.desc("终端传输token ${token}")
|
||||||
.type(HostTerminalTransferDTO.class)
|
.type(TerminalTransferDTO.class)
|
||||||
.struct(RedisCacheStruct.STRING)
|
.struct(RedisCacheStruct.STRING)
|
||||||
.timeout(3, TimeUnit.MINUTES)
|
.timeout(3, TimeUnit.MINUTES)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
CacheKeyDefine SFTP_GET_CONTENT = new CacheKeyBuilder()
|
CacheKeyDefine TERMINAL_SFTP_GET_CONTENT = new CacheKeyBuilder()
|
||||||
.key("sftp:get:content:{}")
|
.key("terminal:sftp:gc:{}")
|
||||||
.desc("sftp 获取文件内容 ${token}")
|
.desc("sftp 获取文件内容 ${token}")
|
||||||
.type(SftpGetContentCacheDTO.class)
|
.type(SftpGetContentCacheDTO.class)
|
||||||
.struct(RedisCacheStruct.STRING)
|
.struct(RedisCacheStruct.STRING)
|
||||||
.timeout(5, TimeUnit.MINUTES)
|
.timeout(5, TimeUnit.MINUTES)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
CacheKeyDefine SFTP_SET_CONTENT = new CacheKeyBuilder()
|
CacheKeyDefine TERMINAL_SFTP_SET_CONTENT = new CacheKeyBuilder()
|
||||||
.key("sftp:set:content:{}")
|
.key("terminal:sftp:sc:{}")
|
||||||
.desc("sftp 设置文件内容 ${token}")
|
.desc("sftp 设置文件内容 ${token}")
|
||||||
.type(SftpSetContentCacheDTO.class)
|
.type(SftpSetContentCacheDTO.class)
|
||||||
.struct(RedisCacheStruct.STRING)
|
.struct(RedisCacheStruct.STRING)
|
||||||
@@ -25,14 +25,14 @@ import java.util.List;
|
|||||||
import static com.orion.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.*;
|
import static com.orion.visor.framework.biz.operator.log.core.enums.OperatorRiskLevel.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 主机终端 操作日志类型
|
* 终端 操作日志类型
|
||||||
*
|
*
|
||||||
* @author Jiahang Li
|
* @author Jiahang Li
|
||||||
* @version 1.0.0
|
* @version 1.0.0
|
||||||
* @since 2023/10/10 17:30
|
* @since 2023/10/10 17:30
|
||||||
*/
|
*/
|
||||||
@Module("asset:terminal")
|
@Module("asset:terminal")
|
||||||
public class HostTerminalOperatorType extends InitializingOperatorTypes {
|
public class TerminalOperatorType extends InitializingOperatorTypes {
|
||||||
|
|
||||||
public static final String CONNECT = "terminal:connect";
|
public static final String CONNECT = "terminal:connect";
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ import lombok.Data;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 主机终端访问参数
|
* 终端访问参数
|
||||||
*
|
*
|
||||||
* @author Jiahang Li
|
* @author Jiahang Li
|
||||||
* @version 1.0.0
|
* @version 1.0.0
|
||||||
@@ -34,8 +34,8 @@ import lombok.NoArgsConstructor;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@DesensitizeObject
|
@DesensitizeObject
|
||||||
@Schema(name = "HostTerminalAccessDTO", description = "主机终端访问参数")
|
@Schema(name = "TerminalAccessDTO", description = "终端访问参数")
|
||||||
public class HostTerminalAccessDTO {
|
public class TerminalAccessDTO {
|
||||||
|
|
||||||
@Schema(description = "userId")
|
@Schema(description = "userId")
|
||||||
private Long userId;
|
private Long userId;
|
||||||
@@ -24,7 +24,7 @@ import lombok.Data;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 主机终端连接参数
|
* 终端连接参数
|
||||||
*
|
*
|
||||||
* @author Jiahang Li
|
* @author Jiahang Li
|
||||||
* @version 1.0.0
|
* @version 1.0.0
|
||||||
@@ -35,8 +35,8 @@ import lombok.NoArgsConstructor;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@DesensitizeObject
|
@DesensitizeObject
|
||||||
@Schema(name = "HostTerminalConnectDTO", description = "主机终端连接参数")
|
@Schema(name = "TerminalConnectDTO", description = "终端连接参数")
|
||||||
public class HostTerminalConnectDTO {
|
public class TerminalConnectDTO {
|
||||||
|
|
||||||
@Schema(description = "logId")
|
@Schema(description = "logId")
|
||||||
private Long logId;
|
private Long logId;
|
||||||
@@ -23,7 +23,7 @@ import lombok.Data;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 主机终端传输参数
|
* 终端传输参数
|
||||||
*
|
*
|
||||||
* @author Jiahang Li
|
* @author Jiahang Li
|
||||||
* @version 1.0.0
|
* @version 1.0.0
|
||||||
@@ -34,8 +34,8 @@ import lombok.NoArgsConstructor;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@DesensitizeObject
|
@DesensitizeObject
|
||||||
@Schema(name = "HostTerminalTransferDTO", description = "主机终端传输参数")
|
@Schema(name = "TerminalTransferDTO", description = "终端传输参数")
|
||||||
public class HostTerminalTransferDTO {
|
public class TerminalTransferDTO {
|
||||||
|
|
||||||
@Schema(description = "userId")
|
@Schema(description = "userId")
|
||||||
private Long userId;
|
private Long userId;
|
||||||
@@ -23,7 +23,7 @@ import lombok.Data;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 主机终端主题 视图响应对象
|
* 终端主题 视图响应对象
|
||||||
*
|
*
|
||||||
* @author Jiahang Li
|
* @author Jiahang Li
|
||||||
* @version 1.0.0
|
* @version 1.0.0
|
||||||
@@ -33,8 +33,8 @@ import lombok.NoArgsConstructor;
|
|||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Schema(name = "HostTerminalThemeVO", description = "主机终端主题 视图响应对象")
|
@Schema(name = "TerminalThemeVO", description = "终端主题 视图响应对象")
|
||||||
public class HostTerminalThemeVO {
|
public class TerminalThemeVO {
|
||||||
|
|
||||||
@Schema(description = "主题名称")
|
@Schema(description = "主题名称")
|
||||||
private String name;
|
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.framework.common.utils.PathUtils;
|
||||||
import com.orion.visor.module.asset.dao.ExecHostLogDAO;
|
import com.orion.visor.module.asset.dao.ExecHostLogDAO;
|
||||||
import com.orion.visor.module.asset.entity.domain.ExecHostLogDO;
|
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.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.ExecCommandDTO;
|
||||||
import com.orion.visor.module.asset.handler.host.exec.command.model.ExecCommandHostDTO;
|
import com.orion.visor.module.asset.handler.host.exec.command.model.ExecCommandHostDTO;
|
||||||
@@ -146,7 +146,7 @@ public abstract class BaseExecCommandHandler implements IExecCommandHandler {
|
|||||||
// 初始化日志
|
// 初始化日志
|
||||||
this.initLogOutputStream();
|
this.initLogOutputStream();
|
||||||
// 打开会话
|
// 打开会话
|
||||||
HostTerminalConnectDTO connect = terminalService.getTerminalConnectInfo(execHostCommand.getHostId());
|
TerminalConnectDTO connect = terminalService.getTerminalConnectInfo(execHostCommand.getHostId());
|
||||||
this.sessionStore = SessionStores.openSessionStore(connect);
|
this.sessionStore = SessionStores.openSessionStore(connect);
|
||||||
if (Booleans.isTrue(execCommand.getScriptExec())) {
|
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.AppConst;
|
||||||
import com.orion.visor.framework.common.constant.Const;
|
import com.orion.visor.framework.common.constant.Const;
|
||||||
import com.orion.visor.framework.common.utils.CryptoUtils;
|
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 lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@@ -48,7 +48,7 @@ public class SessionStores {
|
|||||||
* @param conn conn
|
* @param conn conn
|
||||||
* @return sessionStore
|
* @return sessionStore
|
||||||
*/
|
*/
|
||||||
public static SessionStore openSessionStore(HostTerminalConnectDTO conn) {
|
public static SessionStore openSessionStore(TerminalConnectDTO conn) {
|
||||||
Long hostId = conn.getHostId();
|
Long hostId = conn.getHostId();
|
||||||
String address = conn.getHostAddress();
|
String address = conn.getHostAddress();
|
||||||
String username = conn.getUsername();
|
String username = conn.getUsername();
|
||||||
@@ -81,7 +81,7 @@ public class SessionStores {
|
|||||||
* @param sessionHolder sessionHolder
|
* @param sessionHolder sessionHolder
|
||||||
* @return sessionStore
|
* @return sessionStore
|
||||||
*/
|
*/
|
||||||
private static SessionStore createSessionStore(HostTerminalConnectDTO conn, SessionHolder sessionHolder) {
|
private static SessionStore createSessionStore(TerminalConnectDTO conn, SessionHolder sessionHolder) {
|
||||||
final boolean useKey = conn.getKeyId() != null;
|
final boolean useKey = conn.getKeyId() != null;
|
||||||
// 使用密钥认证
|
// 使用密钥认证
|
||||||
if (useKey) {
|
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.define.AssetThreadPools;
|
||||||
import com.orion.visor.module.asset.handler.host.terminal.enums.InputTypeEnum;
|
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 lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.web.socket.CloseStatus;
|
import org.springframework.web.socket.CloseStatus;
|
||||||
@@ -39,7 +39,7 @@ import javax.annotation.Resource;
|
|||||||
public class TerminalMessageDispatcher extends AbstractWebSocketHandler {
|
public class TerminalMessageDispatcher extends AbstractWebSocketHandler {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private HostTerminalManager hostTerminalManager;
|
private TerminalManager terminalManager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleTextMessage(WebSocketSession session, TextMessage message) {
|
protected void handleTextMessage(WebSocketSession session, TextMessage message) {
|
||||||
@@ -80,7 +80,7 @@ public class TerminalMessageDispatcher extends AbstractWebSocketHandler {
|
|||||||
String id = session.getId();
|
String id = session.getId();
|
||||||
log.info("TerminalMessageDispatcher-afterConnectionClosed id: {}, code: {}, reason: {}", id, status.getCode(), status.getReason());
|
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;
|
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.model.OperatorLogModel;
|
||||||
import com.orion.visor.framework.biz.operator.log.core.service.OperatorLogFrameworkService;
|
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.biz.operator.log.core.utils.OperatorLogs;
|
||||||
import com.orion.visor.framework.common.constant.ErrorMessage;
|
import com.orion.visor.framework.common.constant.ErrorMessage;
|
||||||
import com.orion.visor.framework.websocket.core.utils.WebSockets;
|
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.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.TerminalBasePayload;
|
||||||
import com.orion.visor.module.asset.handler.host.terminal.model.TerminalConfig;
|
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.handler.host.terminal.session.ITerminalSession;
|
||||||
@@ -42,7 +41,7 @@ import java.util.Map;
|
|||||||
public abstract class AbstractTerminalHandler<T extends TerminalBasePayload> implements ITerminalHandler<T> {
|
public abstract class AbstractTerminalHandler<T extends TerminalBasePayload> implements ITerminalHandler<T> {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
protected HostTerminalManager hostTerminalManager;
|
protected TerminalManager terminalManager;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private OperatorLogFrameworkService operatorLogFrameworkService;
|
private OperatorLogFrameworkService operatorLogFrameworkService;
|
||||||
@@ -90,7 +89,7 @@ public abstract class AbstractTerminalHandler<T extends TerminalBasePayload> imp
|
|||||||
String channelId = channel.getId();
|
String channelId = channel.getId();
|
||||||
String sessionId = payload.getSessionId();
|
String sessionId = payload.getSessionId();
|
||||||
// 获取会话并且设置参数
|
// 获取会话并且设置参数
|
||||||
ITerminalSession session = hostTerminalManager.getSession(channelId, sessionId);
|
ITerminalSession session = terminalManager.getSession(channelId, sessionId);
|
||||||
if (session != null) {
|
if (session != null) {
|
||||||
TerminalConfig config = session.getConfig();
|
TerminalConfig config = session.getConfig();
|
||||||
extra.put(OperatorLogs.HOST_ID, config.getHostId());
|
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.lang.utils.collect.Maps;
|
||||||
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
|
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
|
||||||
import com.orion.visor.framework.common.enums.BooleanBit;
|
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.enums.OutputTypeEnum;
|
||||||
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpChangeModeRequest;
|
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpChangeModeRequest;
|
||||||
import com.orion.visor.module.asset.handler.host.terminal.model.response.SftpBaseResponse;
|
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();
|
long startTime = System.currentTimeMillis();
|
||||||
// 获取会话
|
// 获取会话
|
||||||
String sessionId = payload.getSessionId();
|
String sessionId = payload.getSessionId();
|
||||||
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
|
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
|
||||||
String path = payload.getPath();
|
String path = payload.getPath();
|
||||||
Integer mod = payload.getMod();
|
Integer mod = payload.getMod();
|
||||||
log.info("SftpChangeModeHandler-handle start sessionId: {}, path: {}, mod: {}", sessionId, path, mod);
|
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.PATH, path);
|
||||||
extra.put(OperatorLogs.MOD, mod);
|
extra.put(OperatorLogs.MOD, mod);
|
||||||
this.saveOperatorLog(payload, channel,
|
this.saveOperatorLog(payload, channel,
|
||||||
extra, HostTerminalOperatorType.SFTP_CHMOD,
|
extra, TerminalOperatorType.SFTP_CHMOD,
|
||||||
startTime, ex);
|
startTime, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ public class SftpDownloadFlatDirectoryHandler extends AbstractTerminalHandler<Sf
|
|||||||
public void handle(WebSocketSession channel, SftpDownloadFlatDirectoryRequest payload) {
|
public void handle(WebSocketSession channel, SftpDownloadFlatDirectoryRequest payload) {
|
||||||
// 获取会话
|
// 获取会话
|
||||||
String sessionId = payload.getSessionId();
|
String sessionId = payload.getSessionId();
|
||||||
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
|
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
|
||||||
String[] paths = payload.getPath().split("\\|");
|
String[] paths = payload.getPath().split("\\|");
|
||||||
log.info("SftpDownloadFlatDirectoryHandler-handle start sessionId: {}, paths: {}", sessionId, Arrays.toString(paths));
|
log.info("SftpDownloadFlatDirectoryHandler-handle start sessionId: {}, paths: {}", sessionId, Arrays.toString(paths));
|
||||||
Exception ex = null;
|
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.lang.id.UUIds;
|
||||||
import com.orion.visor.framework.common.enums.BooleanBit;
|
import com.orion.visor.framework.common.enums.BooleanBit;
|
||||||
import com.orion.visor.framework.redis.core.utils.RedisStrings;
|
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.entity.dto.SftpGetContentCacheDTO;
|
||||||
import com.orion.visor.module.asset.handler.host.terminal.enums.OutputTypeEnum;
|
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.request.SftpBaseRequest;
|
||||||
@@ -43,7 +43,7 @@ public class SftpGetContentHandler extends AbstractTerminalHandler<SftpBaseReque
|
|||||||
public void handle(WebSocketSession channel, SftpBaseRequest payload) {
|
public void handle(WebSocketSession channel, SftpBaseRequest payload) {
|
||||||
// 获取会话
|
// 获取会话
|
||||||
String sessionId = payload.getSessionId();
|
String sessionId = payload.getSessionId();
|
||||||
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
|
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
|
||||||
String path = payload.getPath();
|
String path = payload.getPath();
|
||||||
log.info("SftpGetContentHandler-handle start sessionId: {}, path: {}", sessionId, path);
|
log.info("SftpGetContentHandler-handle start sessionId: {}, path: {}", sessionId, path);
|
||||||
String token = UUIds.random32();
|
String token = UUIds.random32();
|
||||||
@@ -52,12 +52,12 @@ public class SftpGetContentHandler extends AbstractTerminalHandler<SftpBaseReque
|
|||||||
// 检查文件是否可编辑
|
// 检查文件是否可编辑
|
||||||
session.checkCanEdit(path);
|
session.checkCanEdit(path);
|
||||||
// 设置缓存
|
// 设置缓存
|
||||||
String key = HostTerminalCacheKeyDefine.SFTP_GET_CONTENT.format(token);
|
String key = TerminalCacheKeyDefine.TERMINAL_SFTP_GET_CONTENT.format(token);
|
||||||
SftpGetContentCacheDTO cache = SftpGetContentCacheDTO.builder()
|
SftpGetContentCacheDTO cache = SftpGetContentCacheDTO.builder()
|
||||||
.hostId(session.getConfig().getHostId())
|
.hostId(session.getConfig().getHostId())
|
||||||
.path(path)
|
.path(path)
|
||||||
.build();
|
.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);
|
log.info("SftpGetContentHandler-handle success sessionId: {}, path: {}", sessionId, path);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("SftpGetContentHandler-handle error sessionId: {}", sessionId, 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) {
|
public void handle(WebSocketSession channel, SftpListRequest payload) {
|
||||||
// 获取会话
|
// 获取会话
|
||||||
String sessionId = payload.getSessionId();
|
String sessionId = payload.getSessionId();
|
||||||
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
|
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
|
||||||
String path = payload.getPath();
|
String path = payload.getPath();
|
||||||
log.info("SftpListHandler-handle start sessionId: {}, path: {}", sessionId, path);
|
log.info("SftpListHandler-handle start sessionId: {}, path: {}", sessionId, path);
|
||||||
Exception ex = null;
|
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.lang.utils.collect.Maps;
|
||||||
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
|
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
|
||||||
import com.orion.visor.framework.common.enums.BooleanBit;
|
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.enums.OutputTypeEnum;
|
||||||
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
|
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
|
||||||
import com.orion.visor.module.asset.handler.host.terminal.model.response.SftpBaseResponse;
|
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();
|
long startTime = System.currentTimeMillis();
|
||||||
// 获取会话
|
// 获取会话
|
||||||
String sessionId = payload.getSessionId();
|
String sessionId = payload.getSessionId();
|
||||||
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
|
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
|
||||||
String path = payload.getPath();
|
String path = payload.getPath();
|
||||||
log.info("SftpMakeDirectoryHandler-handle start sessionId: {}, path: {}", sessionId, path);
|
log.info("SftpMakeDirectoryHandler-handle start sessionId: {}, path: {}", sessionId, path);
|
||||||
Exception ex = null;
|
Exception ex = null;
|
||||||
@@ -69,7 +69,7 @@ public class SftpMakeDirectoryHandler extends AbstractTerminalHandler<SftpBaseRe
|
|||||||
Map<String, Object> extra = Maps.newMap();
|
Map<String, Object> extra = Maps.newMap();
|
||||||
extra.put(OperatorLogs.PATH, path);
|
extra.put(OperatorLogs.PATH, path);
|
||||||
this.saveOperatorLog(payload, channel,
|
this.saveOperatorLog(payload, channel,
|
||||||
extra, HostTerminalOperatorType.SFTP_MKDIR,
|
extra, TerminalOperatorType.SFTP_MKDIR,
|
||||||
startTime, ex);
|
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.lang.utils.collect.Maps;
|
||||||
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
|
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
|
||||||
import com.orion.visor.framework.common.enums.BooleanBit;
|
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.enums.OutputTypeEnum;
|
||||||
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpMoveRequest;
|
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpMoveRequest;
|
||||||
import com.orion.visor.module.asset.handler.host.terminal.model.response.SftpBaseResponse;
|
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();
|
long startTime = System.currentTimeMillis();
|
||||||
// 获取会话
|
// 获取会话
|
||||||
String sessionId = payload.getSessionId();
|
String sessionId = payload.getSessionId();
|
||||||
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
|
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
|
||||||
String path = payload.getPath();
|
String path = payload.getPath();
|
||||||
String target = payload.getTarget();
|
String target = payload.getTarget();
|
||||||
log.info("SftpMoveHandler-handle start sessionId: {}, path: {}, target: {}", sessionId, path, target);
|
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.PATH, path);
|
||||||
extra.put(OperatorLogs.TARGET, target);
|
extra.put(OperatorLogs.TARGET, target);
|
||||||
this.saveOperatorLog(payload, channel,
|
this.saveOperatorLog(payload, channel,
|
||||||
extra, HostTerminalOperatorType.SFTP_MOVE,
|
extra, TerminalOperatorType.SFTP_MOVE,
|
||||||
startTime, ex);
|
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.lang.utils.collect.Maps;
|
||||||
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
|
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
|
||||||
import com.orion.visor.framework.common.enums.BooleanBit;
|
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.enums.OutputTypeEnum;
|
||||||
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
|
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
|
||||||
import com.orion.visor.module.asset.handler.host.terminal.model.response.SftpBaseResponse;
|
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 path = payload.getPath();
|
||||||
String sessionId = payload.getSessionId();
|
String sessionId = payload.getSessionId();
|
||||||
// 获取会话
|
// 获取会话
|
||||||
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
|
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
|
||||||
String[] paths = path.split("\\|");
|
String[] paths = path.split("\\|");
|
||||||
log.info("SftpRemoveHandler-handle start sessionId: {}, path: {}", sessionId, Arrays.toString(paths));
|
log.info("SftpRemoveHandler-handle start sessionId: {}, path: {}", sessionId, Arrays.toString(paths));
|
||||||
Exception ex = null;
|
Exception ex = null;
|
||||||
@@ -71,7 +71,7 @@ public class SftpRemoveHandler extends AbstractTerminalHandler<SftpBaseRequest>
|
|||||||
Map<String, Object> extra = Maps.newMap();
|
Map<String, Object> extra = Maps.newMap();
|
||||||
extra.put(OperatorLogs.PATH, path);
|
extra.put(OperatorLogs.PATH, path);
|
||||||
this.saveOperatorLog(payload, channel,
|
this.saveOperatorLog(payload, channel,
|
||||||
extra, HostTerminalOperatorType.SFTP_REMOVE,
|
extra, TerminalOperatorType.SFTP_REMOVE,
|
||||||
startTime, ex);
|
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.biz.operator.log.core.utils.OperatorLogs;
|
||||||
import com.orion.visor.framework.common.enums.BooleanBit;
|
import com.orion.visor.framework.common.enums.BooleanBit;
|
||||||
import com.orion.visor.framework.redis.core.utils.RedisStrings;
|
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.define.operator.HostTerminalOperatorType;
|
import com.orion.visor.module.asset.define.operator.TerminalOperatorType;
|
||||||
import com.orion.visor.module.asset.entity.dto.SftpSetContentCacheDTO;
|
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.enums.OutputTypeEnum;
|
||||||
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
|
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();
|
long startTime = System.currentTimeMillis();
|
||||||
// 获取会话
|
// 获取会话
|
||||||
String sessionId = payload.getSessionId();
|
String sessionId = payload.getSessionId();
|
||||||
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
|
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
|
||||||
String path = payload.getPath();
|
String path = payload.getPath();
|
||||||
log.info("SftpSetContentHandler-handle start sessionId: {}, path: {}", sessionId, path);
|
log.info("SftpSetContentHandler-handle start sessionId: {}, path: {}", sessionId, path);
|
||||||
String token = UUIds.random32();
|
String token = UUIds.random32();
|
||||||
@@ -58,12 +58,12 @@ public class SftpSetContentHandler extends AbstractTerminalHandler<SftpBaseReque
|
|||||||
// 检查文件是否可编辑
|
// 检查文件是否可编辑
|
||||||
session.checkCanEdit(path);
|
session.checkCanEdit(path);
|
||||||
// 设置缓存
|
// 设置缓存
|
||||||
String key = HostTerminalCacheKeyDefine.SFTP_SET_CONTENT.format(token);
|
String key = TerminalCacheKeyDefine.TERMINAL_SFTP_SET_CONTENT.format(token);
|
||||||
SftpSetContentCacheDTO cache = SftpSetContentCacheDTO.builder()
|
SftpSetContentCacheDTO cache = SftpSetContentCacheDTO.builder()
|
||||||
.hostId(session.getConfig().getHostId())
|
.hostId(session.getConfig().getHostId())
|
||||||
.path(path)
|
.path(path)
|
||||||
.build();
|
.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);
|
log.info("SftpSetContentHandler-handle success sessionId: {}, path: {}", sessionId, path);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("SftpSetContentHandler-handle error sessionId: {}", sessionId, 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();
|
Map<String, Object> extra = Maps.newMap();
|
||||||
extra.put(OperatorLogs.PATH, path);
|
extra.put(OperatorLogs.PATH, path);
|
||||||
this.saveOperatorLog(payload, channel,
|
this.saveOperatorLog(payload, channel,
|
||||||
extra, HostTerminalOperatorType.SFTP_SET_CONTENT,
|
extra, TerminalOperatorType.SFTP_SET_CONTENT,
|
||||||
startTime, ex);
|
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.lang.utils.collect.Maps;
|
||||||
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
|
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
|
||||||
import com.orion.visor.framework.common.enums.BooleanBit;
|
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.enums.OutputTypeEnum;
|
||||||
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
|
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
|
||||||
import com.orion.visor.module.asset.handler.host.terminal.model.response.SftpBaseResponse;
|
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();
|
long startTime = System.currentTimeMillis();
|
||||||
// 获取会话
|
// 获取会话
|
||||||
String sessionId = payload.getSessionId();
|
String sessionId = payload.getSessionId();
|
||||||
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
|
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
|
||||||
String path = payload.getPath();
|
String path = payload.getPath();
|
||||||
log.info("SftpTouchHandler-handle start sessionId: {}, path: {}", sessionId, path);
|
log.info("SftpTouchHandler-handle start sessionId: {}, path: {}", sessionId, path);
|
||||||
Exception ex = null;
|
Exception ex = null;
|
||||||
@@ -69,7 +69,7 @@ public class SftpTouchHandler extends AbstractTerminalHandler<SftpBaseRequest> {
|
|||||||
Map<String, Object> extra = Maps.newMap();
|
Map<String, Object> extra = Maps.newMap();
|
||||||
extra.put(OperatorLogs.PATH, path);
|
extra.put(OperatorLogs.PATH, path);
|
||||||
this.saveOperatorLog(payload, channel,
|
this.saveOperatorLog(payload, channel,
|
||||||
extra, HostTerminalOperatorType.SFTP_TOUCH,
|
extra, TerminalOperatorType.SFTP_TOUCH,
|
||||||
startTime, ex);
|
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.lang.utils.collect.Maps;
|
||||||
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
|
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
|
||||||
import com.orion.visor.framework.common.enums.BooleanBit;
|
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.enums.OutputTypeEnum;
|
||||||
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
|
import com.orion.visor.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
|
||||||
import com.orion.visor.module.asset.handler.host.terminal.model.response.SftpBaseResponse;
|
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();
|
long startTime = System.currentTimeMillis();
|
||||||
// 获取会话
|
// 获取会话
|
||||||
String sessionId = payload.getSessionId();
|
String sessionId = payload.getSessionId();
|
||||||
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
|
ISftpSession session = terminalManager.getSession(channel.getId(), sessionId);
|
||||||
String path = payload.getPath();
|
String path = payload.getPath();
|
||||||
log.info("SftpTruncateHandler-handle start sessionId: {}, path: {}", sessionId, path);
|
log.info("SftpTruncateHandler-handle start sessionId: {}, path: {}", sessionId, path);
|
||||||
Exception ex = null;
|
Exception ex = null;
|
||||||
@@ -69,7 +69,7 @@ public class SftpTruncateHandler extends AbstractTerminalHandler<SftpBaseRequest
|
|||||||
Map<String, Object> extra = Maps.newMap();
|
Map<String, Object> extra = Maps.newMap();
|
||||||
extra.put(OperatorLogs.PATH, path);
|
extra.put(OperatorLogs.PATH, path);
|
||||||
this.saveOperatorLog(payload, channel,
|
this.saveOperatorLog(payload, channel,
|
||||||
extra, HostTerminalOperatorType.SFTP_TRUNCATE,
|
extra, TerminalOperatorType.SFTP_TRUNCATE,
|
||||||
startTime, ex);
|
startTime, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public class SshInputHandler extends AbstractTerminalHandler<SshInputRequest> {
|
|||||||
@Override
|
@Override
|
||||||
public void handle(WebSocketSession channel, SshInputRequest payload) {
|
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());
|
session.write(payload.getCommand());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public class SshResizeHandler extends AbstractTerminalHandler<SshResizeRequest>
|
|||||||
@Override
|
@Override
|
||||||
public void handle(WebSocketSession channel, SshResizeRequest payload) {
|
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());
|
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.common.enums.BooleanBit;
|
||||||
import com.orion.visor.framework.websocket.core.utils.WebSockets;
|
import com.orion.visor.framework.websocket.core.utils.WebSockets;
|
||||||
import com.orion.visor.module.asset.dao.HostDAO;
|
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.TerminalConnectLogDO;
|
||||||
import com.orion.visor.module.asset.entity.domain.HostDO;
|
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.entity.request.host.TerminalConnectLogCreateRequest;
|
||||||
import com.orion.visor.module.asset.enums.TerminalConnectStatusEnum;
|
import com.orion.visor.module.asset.enums.TerminalConnectStatusEnum;
|
||||||
import com.orion.visor.module.asset.enums.TerminalConnectTypeEnum;
|
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);
|
log.info("TerminalCheckHandler-handle unknown host userId: {}, hostId: {}, sessionId: {}", userId, hostId, sessionId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
HostTerminalConnectDTO connect = null;
|
TerminalConnectDTO connect = null;
|
||||||
Exception ex = null;
|
Exception ex = null;
|
||||||
try {
|
try {
|
||||||
// 获取连接信息
|
// 获取连接信息
|
||||||
@@ -133,7 +133,7 @@ public class TerminalCheckHandler extends AbstractTerminalHandler<TerminalCheckR
|
|||||||
* @return 是否存在
|
* @return 是否存在
|
||||||
*/
|
*/
|
||||||
private boolean checkSession(WebSocketSession channel, TerminalCheckRequest payload) {
|
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) {
|
if (session != null) {
|
||||||
this.sendCheckFailedMessage(channel, payload, ErrorMessage.SESSION_PRESENT);
|
this.sendCheckFailedMessage(channel, payload, ErrorMessage.SESSION_PRESENT);
|
||||||
return true;
|
return true;
|
||||||
@@ -207,7 +207,7 @@ public class TerminalCheckHandler extends AbstractTerminalHandler<TerminalCheckR
|
|||||||
extra.put(OperatorLogs.SESSION_ID, sessionId);
|
extra.put(OperatorLogs.SESSION_ID, sessionId);
|
||||||
// 日志参数
|
// 日志参数
|
||||||
OperatorLogModel logModel = TerminalUtils.getOperatorLogModel(channel, extra,
|
OperatorLogModel logModel = TerminalUtils.getOperatorLogModel(channel, extra,
|
||||||
HostTerminalOperatorType.CONNECT, startTime, ex);
|
TerminalOperatorType.CONNECT, startTime, ex);
|
||||||
// 记录操作日志
|
// 记录操作日志
|
||||||
operatorLogFrameworkService.insert(logModel);
|
operatorLogFrameworkService.insert(logModel);
|
||||||
// 记录连接日志
|
// 记录连接日志
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public class TerminalCloseHandler extends AbstractTerminalHandler<TerminalBasePa
|
|||||||
public void handle(WebSocketSession channel, TerminalBasePayload payload) {
|
public void handle(WebSocketSession channel, TerminalBasePayload payload) {
|
||||||
log.info("TerminalCloseHandler-handle start sessionId: {}", payload.getSessionId());
|
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.constant.ExtraFieldConst;
|
||||||
import com.orion.visor.framework.common.enums.BooleanBit;
|
import com.orion.visor.framework.common.enums.BooleanBit;
|
||||||
import com.orion.visor.framework.websocket.core.utils.WebSockets;
|
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.TerminalConnectStatusEnum;
|
||||||
import com.orion.visor.module.asset.enums.TerminalConnectTypeEnum;
|
import com.orion.visor.module.asset.enums.TerminalConnectTypeEnum;
|
||||||
import com.orion.visor.module.asset.handler.host.jsch.SessionStores;
|
import com.orion.visor.module.asset.handler.host.jsch.SessionStores;
|
||||||
@@ -65,7 +65,7 @@ public class TerminalConnectHandler extends AbstractTerminalHandler<TerminalConn
|
|||||||
String sessionId = payload.getSessionId();
|
String sessionId = payload.getSessionId();
|
||||||
log.info("TerminalConnectHandler-handle start sessionId: {}", sessionId);
|
log.info("TerminalConnectHandler-handle start sessionId: {}", sessionId);
|
||||||
// 获取终端连接信息
|
// 获取终端连接信息
|
||||||
HostTerminalConnectDTO connect = WebSockets.getAttr(channel, sessionId);
|
TerminalConnectDTO connect = WebSockets.getAttr(channel, sessionId);
|
||||||
if (connect == null) {
|
if (connect == null) {
|
||||||
log.info("TerminalConnectHandler-handle unknown sessionId: {}", sessionId);
|
log.info("TerminalConnectHandler-handle unknown sessionId: {}", sessionId);
|
||||||
this.send(channel,
|
this.send(channel,
|
||||||
@@ -85,7 +85,7 @@ public class TerminalConnectHandler extends AbstractTerminalHandler<TerminalConn
|
|||||||
// 连接主机
|
// 连接主机
|
||||||
session = this.connect(sessionId, connect, channel, payload);
|
session = this.connect(sessionId, connect, channel, payload);
|
||||||
// 添加会话到 manager
|
// 添加会话到 manager
|
||||||
hostTerminalManager.addSession(session);
|
terminalManager.addSession(session);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
ex = e;
|
ex = e;
|
||||||
Streams.close(session);
|
Streams.close(session);
|
||||||
@@ -114,7 +114,7 @@ public class TerminalConnectHandler extends AbstractTerminalHandler<TerminalConn
|
|||||||
* @return channel
|
* @return channel
|
||||||
*/
|
*/
|
||||||
private ITerminalSession connect(String sessionId,
|
private ITerminalSession connect(String sessionId,
|
||||||
HostTerminalConnectDTO connect,
|
TerminalConnectDTO connect,
|
||||||
WebSocketSession channel,
|
WebSocketSession channel,
|
||||||
TerminalConnectRequest body) {
|
TerminalConnectRequest body) {
|
||||||
String connectType = connect.getConnectType();
|
String connectType = connect.getConnectType();
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public class TerminalPingHandler extends AbstractTerminalHandler<TerminalBasePay
|
|||||||
// 发送 pong
|
// 发送 pong
|
||||||
this.send(channel, OutputTypeEnum.PONG.getType());
|
this.send(channel, OutputTypeEnum.PONG.getType());
|
||||||
// 活跃 terminal
|
// 活跃 terminal
|
||||||
Map<String, ITerminalSession> sessions = hostTerminalManager.getSession(channel.getId());
|
Map<String, ITerminalSession> sessions = terminalManager.getSession(channel.getId());
|
||||||
if (!Maps.isEmpty(sessions)) {
|
if (!Maps.isEmpty(sessions)) {
|
||||||
for (ITerminalSession session : sessions.values()) {
|
for (ITerminalSession session : sessions.values()) {
|
||||||
session.keepAlive();
|
session.keepAlive();
|
||||||
|
|||||||
@@ -25,14 +25,14 @@ import java.util.Map;
|
|||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 主机终端管理器
|
* 终端管理器
|
||||||
*
|
*
|
||||||
* @author Jiahang Li
|
* @author Jiahang Li
|
||||||
* @version 1.0.0
|
* @version 1.0.0
|
||||||
* @since 2024/1/3 11:35
|
* @since 2024/1/3 11:35
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class HostTerminalManager {
|
public class TerminalManager {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会话存储器
|
* 会话存储器
|
||||||
@@ -21,7 +21,7 @@ import lombok.Data;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 主机终端连接参数
|
* 终端连接参数
|
||||||
*
|
*
|
||||||
* @author Jiahang Li
|
* @author Jiahang Li
|
||||||
* @version 1.0.0
|
* @version 1.0.0
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import com.orion.net.host.SessionStore;
|
|||||||
import com.orion.spring.SpringHolder;
|
import com.orion.spring.SpringHolder;
|
||||||
import com.orion.visor.framework.common.constant.ExtraFieldConst;
|
import com.orion.visor.framework.common.constant.ExtraFieldConst;
|
||||||
import com.orion.visor.framework.websocket.core.utils.WebSockets;
|
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.jsch.SessionStores;
|
||||||
import com.orion.visor.module.asset.handler.host.transfer.enums.TransferOperator;
|
import com.orion.visor.module.asset.handler.host.transfer.enums.TransferOperator;
|
||||||
import com.orion.visor.module.asset.handler.host.transfer.enums.TransferReceiver;
|
import com.orion.visor.module.asset.handler.host.transfer.enums.TransferReceiver;
|
||||||
@@ -110,12 +110,12 @@ public class TransferHandler implements ITransferHandler {
|
|||||||
if (terminalConnection == null) {
|
if (terminalConnection == null) {
|
||||||
// 获取终端连接信息
|
// 获取终端连接信息
|
||||||
Long userId = WebSockets.getAttr(channel, ExtraFieldConst.USER_ID);
|
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));
|
terminalConnection = new TerminalConnection(connectInfo, SessionStores.openSessionStore(connectInfo));
|
||||||
terminalConnections.put(hostId, terminalConnection);
|
terminalConnections.put(hostId, terminalConnection);
|
||||||
}
|
}
|
||||||
SessionStore sessionStore = terminalConnection.getSessionStore();
|
SessionStore sessionStore = terminalConnection.getSessionStore();
|
||||||
HostTerminalConnectDTO connectInfo = terminalConnection.getConnectInfo();
|
TerminalConnectDTO connectInfo = terminalConnection.getConnectInfo();
|
||||||
// 获取会话
|
// 获取会话
|
||||||
ITransferSession session = sessions.get(sessionKey);
|
ITransferSession session = sessions.get(sessionKey);
|
||||||
if (session == null) {
|
if (session == null) {
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
package com.orion.visor.module.asset.handler.host.transfer.model;
|
package com.orion.visor.module.asset.handler.host.transfer.model;
|
||||||
|
|
||||||
import com.orion.net.host.SessionStore;
|
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.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -38,7 +38,7 @@ public class TerminalConnection {
|
|||||||
/**
|
/**
|
||||||
* connectInfo
|
* connectInfo
|
||||||
*/
|
*/
|
||||||
private HostTerminalConnectDTO connectInfo;
|
private TerminalConnectDTO connectInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sessionStore
|
* 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.Const;
|
||||||
import com.orion.visor.framework.common.constant.ErrorMessage;
|
import com.orion.visor.framework.common.constant.ErrorMessage;
|
||||||
import com.orion.visor.module.asset.define.AssetThreadPools;
|
import com.orion.visor.module.asset.define.AssetThreadPools;
|
||||||
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.dto.HostTerminalConnectDTO;
|
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.enums.TransferReceiver;
|
||||||
import com.orion.visor.module.asset.handler.host.transfer.model.TransferOperatorRequest;
|
import com.orion.visor.module.asset.handler.host.transfer.model.TransferOperatorRequest;
|
||||||
import com.orion.visor.module.asset.handler.host.transfer.utils.TransferUtils;
|
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;
|
private Long fileSize;
|
||||||
|
|
||||||
public DownloadSession(HostTerminalConnectDTO connectInfo, SessionStore sessionStore, WebSocketSession channel) {
|
public DownloadSession(TerminalConnectDTO connectInfo, SessionStore sessionStore, WebSocketSession channel) {
|
||||||
super(connectInfo, sessionStore, channel);
|
super(connectInfo, sessionStore, channel);
|
||||||
this.fileSize = 0L;
|
this.fileSize = 0L;
|
||||||
}
|
}
|
||||||
@@ -65,7 +65,7 @@ public class DownloadSession extends TransferSession implements StreamingRespons
|
|||||||
super.onStart(request);
|
super.onStart(request);
|
||||||
log.info("DownloadSession.startDownload open start channelId: {}, path: {}", channelId, path);
|
log.info("DownloadSession.startDownload open start channelId: {}, path: {}", channelId, path);
|
||||||
// 保存操作日志
|
// 保存操作日志
|
||||||
this.saveOperatorLog(HostTerminalOperatorType.SFTP_DOWNLOAD, path);
|
this.saveOperatorLog(TerminalOperatorType.SFTP_DOWNLOAD, path);
|
||||||
// 检查连接
|
// 检查连接
|
||||||
this.init();
|
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.service.OperatorLogFrameworkService;
|
||||||
import com.orion.visor.framework.biz.operator.log.core.utils.OperatorLogs;
|
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.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.terminal.utils.TerminalUtils;
|
||||||
import com.orion.visor.module.asset.handler.host.transfer.enums.TransferReceiver;
|
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.model.TransferOperatorRequest;
|
||||||
@@ -49,7 +49,7 @@ public abstract class TransferSession implements ITransferSession {
|
|||||||
|
|
||||||
protected static final AppSftpConfig SFTP_CONFIG = SpringHolder.getBean(AppSftpConfig.class);
|
protected static final AppSftpConfig SFTP_CONFIG = SpringHolder.getBean(AppSftpConfig.class);
|
||||||
|
|
||||||
protected final HostTerminalConnectDTO connectInfo;
|
protected final TerminalConnectDTO connectInfo;
|
||||||
|
|
||||||
protected final SessionStore sessionStore;
|
protected final SessionStore sessionStore;
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ public abstract class TransferSession implements ITransferSession {
|
|||||||
@Setter
|
@Setter
|
||||||
protected String token;
|
protected String token;
|
||||||
|
|
||||||
public TransferSession(HostTerminalConnectDTO connectInfo, SessionStore sessionStore, WebSocketSession channel) {
|
public TransferSession(TerminalConnectDTO connectInfo, SessionStore sessionStore, WebSocketSession channel) {
|
||||||
this.connectInfo = connectInfo;
|
this.connectInfo = connectInfo;
|
||||||
this.sessionStore = sessionStore;
|
this.sessionStore = sessionStore;
|
||||||
this.channel = channel;
|
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.lang.utils.io.Streams;
|
||||||
import com.orion.net.host.SessionStore;
|
import com.orion.net.host.SessionStore;
|
||||||
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.dto.HostTerminalConnectDTO;
|
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.enums.TransferReceiver;
|
||||||
import com.orion.visor.module.asset.handler.host.transfer.model.TransferOperatorRequest;
|
import com.orion.visor.module.asset.handler.host.transfer.model.TransferOperatorRequest;
|
||||||
import com.orion.visor.module.asset.handler.host.transfer.utils.TransferUtils;
|
import com.orion.visor.module.asset.handler.host.transfer.utils.TransferUtils;
|
||||||
@@ -41,7 +41,7 @@ public class UploadSession extends TransferSession {
|
|||||||
|
|
||||||
protected OutputStream outputStream;
|
protected OutputStream outputStream;
|
||||||
|
|
||||||
public UploadSession(HostTerminalConnectDTO connectInfo, SessionStore sessionStore, WebSocketSession channel) {
|
public UploadSession(TerminalConnectDTO connectInfo, SessionStore sessionStore, WebSocketSession channel) {
|
||||||
super(connectInfo, sessionStore, channel);
|
super(connectInfo, sessionStore, channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,7 +51,7 @@ public class UploadSession extends TransferSession {
|
|||||||
try {
|
try {
|
||||||
log.info("UploadSession.startUpload start channelId: {}, path: {}", channelId, path);
|
log.info("UploadSession.startUpload start channelId: {}, path: {}", channelId, path);
|
||||||
// 保存操作日志
|
// 保存操作日志
|
||||||
this.saveOperatorLog(HostTerminalOperatorType.SFTP_UPLOAD, path);
|
this.saveOperatorLog(TerminalOperatorType.SFTP_UPLOAD, path);
|
||||||
// 检查连接
|
// 检查连接
|
||||||
this.init();
|
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.dao.UploadTaskFileDAO;
|
||||||
import com.orion.visor.module.asset.define.config.AppSftpConfig;
|
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.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.enums.UploadTaskFileStatusEnum;
|
||||||
import com.orion.visor.module.asset.handler.host.jsch.SessionStores;
|
import com.orion.visor.module.asset.handler.host.jsch.SessionStores;
|
||||||
import com.orion.visor.module.asset.handler.host.upload.model.FileUploadFileItemDTO;
|
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);
|
log.info("HostFileUploader.initSession start taskId: {}, hostId: {}", taskId, hostId);
|
||||||
try {
|
try {
|
||||||
// 打开会话
|
// 打开会话
|
||||||
HostTerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(hostId);
|
TerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(hostId);
|
||||||
this.sessionStore = SessionStores.openSessionStore(connectInfo);
|
this.sessionStore = SessionStores.openSessionStore(connectInfo);
|
||||||
this.executor = sessionStore.getSftpExecutor(connectInfo.getFileNameCharset());
|
this.executor = sessionStore.getSftpExecutor(connectInfo.getFileNameCharset());
|
||||||
executor.connect();
|
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.constant.ExtraFieldConst;
|
||||||
import com.orion.visor.framework.common.meta.TraceIdHolder;
|
import com.orion.visor.framework.common.meta.TraceIdHolder;
|
||||||
import com.orion.visor.framework.common.utils.Requests;
|
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 com.orion.visor.module.asset.service.TerminalService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.http.server.ServerHttpRequest;
|
import org.springframework.http.server.ServerHttpRequest;
|
||||||
@@ -51,7 +51,7 @@ public class TerminalAccessInterceptor implements HandshakeInterceptor {
|
|||||||
String accessToken = Urls.getUrlSource(request.getURI().getPath());
|
String accessToken = Urls.getUrlSource(request.getURI().getPath());
|
||||||
log.info("TerminalAccessInterceptor-beforeHandshake start accessToken: {}", accessToken);
|
log.info("TerminalAccessInterceptor-beforeHandshake start accessToken: {}", accessToken);
|
||||||
// 获取连接数据
|
// 获取连接数据
|
||||||
HostTerminalAccessDTO access = terminalService.getAccessInfoByToken(accessToken);
|
TerminalAccessDTO access = terminalService.getAccessInfoByToken(accessToken);
|
||||||
if (access == null) {
|
if (access == null) {
|
||||||
log.error("TerminalAccessInterceptor-beforeHandshake absent accessToken: {}", accessToken);
|
log.error("TerminalAccessInterceptor-beforeHandshake absent accessToken: {}", accessToken);
|
||||||
return false;
|
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.constant.ExtraFieldConst;
|
||||||
import com.orion.visor.framework.common.meta.TraceIdHolder;
|
import com.orion.visor.framework.common.meta.TraceIdHolder;
|
||||||
import com.orion.visor.framework.common.utils.Requests;
|
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 com.orion.visor.module.asset.service.TerminalService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.http.server.ServerHttpRequest;
|
import org.springframework.http.server.ServerHttpRequest;
|
||||||
@@ -51,7 +51,7 @@ public class TerminalTransferInterceptor implements HandshakeInterceptor {
|
|||||||
String transferToken = Urls.getUrlSource(request.getURI().getPath());
|
String transferToken = Urls.getUrlSource(request.getURI().getPath());
|
||||||
log.info("TerminalTransferInterceptor-beforeHandshake start transferToken: {}", transferToken);
|
log.info("TerminalTransferInterceptor-beforeHandshake start transferToken: {}", transferToken);
|
||||||
// 获取连接数据
|
// 获取连接数据
|
||||||
HostTerminalTransferDTO transfer = terminalService.getTransferInfoByToken(transferToken);
|
TerminalTransferDTO transfer = terminalService.getTransferInfoByToken(transferToken);
|
||||||
if (transfer == null) {
|
if (transfer == null) {
|
||||||
log.error("TerminalTransferInterceptor-beforeHandshake absent transferToken: {}", transferToken);
|
log.error("TerminalTransferInterceptor-beforeHandshake absent transferToken: {}", transferToken);
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -16,15 +16,15 @@
|
|||||||
package com.orion.visor.module.asset.service;
|
package com.orion.visor.module.asset.service;
|
||||||
|
|
||||||
import com.orion.visor.module.asset.entity.domain.HostDO;
|
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.TerminalAccessDTO;
|
||||||
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.dto.HostTerminalTransferDTO;
|
import com.orion.visor.module.asset.entity.dto.TerminalTransferDTO;
|
||||||
import com.orion.visor.module.asset.entity.vo.HostTerminalThemeVO;
|
import com.orion.visor.module.asset.entity.vo.TerminalThemeVO;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 主机终端服务
|
* 终端服务
|
||||||
*
|
*
|
||||||
* @author Jiahang Li
|
* @author Jiahang Li
|
||||||
* @version 1.0.0
|
* @version 1.0.0
|
||||||
@@ -37,7 +37,7 @@ public interface TerminalService {
|
|||||||
*
|
*
|
||||||
* @return themes
|
* @return themes
|
||||||
*/
|
*/
|
||||||
List<HostTerminalThemeVO> getTerminalThemes();
|
List<TerminalThemeVO> getTerminalThemes();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取主机终端访问 accessToken
|
* 获取主机终端访问 accessToken
|
||||||
@@ -54,20 +54,20 @@ public interface TerminalService {
|
|||||||
String getTerminalTransferToken();
|
String getTerminalTransferToken();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过 accessToken 获取主机终端访问信息
|
* 通过 accessToken 获取终端访问信息
|
||||||
*
|
*
|
||||||
* @param token token
|
* @param token token
|
||||||
* @return config
|
* @return config
|
||||||
*/
|
*/
|
||||||
HostTerminalAccessDTO getAccessInfoByToken(String token);
|
TerminalAccessDTO getAccessInfoByToken(String token);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过 transferToken 获取主机终端传输信息
|
* 通过 transferToken 获取终端传输信息
|
||||||
*
|
*
|
||||||
* @param token token
|
* @param token token
|
||||||
* @return config
|
* @return config
|
||||||
*/
|
*/
|
||||||
HostTerminalTransferDTO getTransferInfoByToken(String token);
|
TerminalTransferDTO getTransferInfoByToken(String token);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取连接信息
|
* 获取连接信息
|
||||||
@@ -75,7 +75,7 @@ public interface TerminalService {
|
|||||||
* @param hostId hostId
|
* @param hostId hostId
|
||||||
* @return session
|
* @return session
|
||||||
*/
|
*/
|
||||||
HostTerminalConnectDTO getTerminalConnectInfo(Long hostId);
|
TerminalConnectDTO getTerminalConnectInfo(Long hostId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 使用用户配置获取连接信息
|
* 使用用户配置获取连接信息
|
||||||
@@ -84,7 +84,7 @@ public interface TerminalService {
|
|||||||
* @param userId userId
|
* @param userId userId
|
||||||
* @return session
|
* @return session
|
||||||
*/
|
*/
|
||||||
HostTerminalConnectDTO getTerminalConnectInfo(Long userId, Long hostId);
|
TerminalConnectDTO getTerminalConnectInfo(Long userId, Long hostId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 使用用户配置获取连接信息
|
* 使用用户配置获取连接信息
|
||||||
@@ -93,6 +93,6 @@ public interface TerminalService {
|
|||||||
* @param userId userId
|
* @param userId userId
|
||||||
* @return session
|
* @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.redis.core.utils.RedisStrings;
|
||||||
import com.orion.visor.framework.security.core.utils.SecurityUtils;
|
import com.orion.visor.framework.security.core.utils.SecurityUtils;
|
||||||
import com.orion.visor.module.asset.convert.HostSftpLogConvert;
|
import com.orion.visor.module.asset.convert.HostSftpLogConvert;
|
||||||
import com.orion.visor.module.asset.define.cache.HostTerminalCacheKeyDefine;
|
import com.orion.visor.module.asset.define.cache.TerminalCacheKeyDefine;
|
||||||
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.dto.HostTerminalConnectDTO;
|
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.SftpGetContentCacheDTO;
|
||||||
import com.orion.visor.module.asset.entity.dto.SftpSetContentCacheDTO;
|
import com.orion.visor.module.asset.entity.dto.SftpSetContentCacheDTO;
|
||||||
import com.orion.visor.module.asset.entity.request.host.HostSftpLogQueryRequest;
|
import com.orion.visor.module.asset.entity.request.host.HostSftpLogQueryRequest;
|
||||||
@@ -117,8 +117,8 @@ public class HostSftpServiceImpl implements HostSftpService {
|
|||||||
@Override
|
@Override
|
||||||
public void getFileContentByToken(String token, HttpServletResponse response) throws IOException {
|
public void getFileContentByToken(String token, HttpServletResponse response) throws IOException {
|
||||||
// 解析 token
|
// 解析 token
|
||||||
String key = HostTerminalCacheKeyDefine.SFTP_GET_CONTENT.format(token);
|
String key = TerminalCacheKeyDefine.TERMINAL_SFTP_GET_CONTENT.format(token);
|
||||||
SftpGetContentCacheDTO cache = RedisStrings.getJson(key, HostTerminalCacheKeyDefine.SFTP_GET_CONTENT);
|
SftpGetContentCacheDTO cache = RedisStrings.getJson(key, TerminalCacheKeyDefine.TERMINAL_SFTP_GET_CONTENT);
|
||||||
if (cache == null) {
|
if (cache == null) {
|
||||||
Servlets.writeHttpWrapper(response, HttpWrapper.error(ErrorMessage.FILE_ABSENT));
|
Servlets.writeHttpWrapper(response, HttpWrapper.error(ErrorMessage.FILE_ABSENT));
|
||||||
return;
|
return;
|
||||||
@@ -131,7 +131,7 @@ public class HostSftpServiceImpl implements HostSftpService {
|
|||||||
InputStream in = null;
|
InputStream in = null;
|
||||||
try {
|
try {
|
||||||
// 获取终端连接信息
|
// 获取终端连接信息
|
||||||
HostTerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(SecurityUtils.getLoginUserId(), cache.getHostId());
|
TerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(SecurityUtils.getLoginUserId(), cache.getHostId());
|
||||||
sessionStore = SessionStores.openSessionStore(connectInfo);
|
sessionStore = SessionStores.openSessionStore(connectInfo);
|
||||||
executor = sessionStore.getSftpExecutor(connectInfo.getFileNameCharset());
|
executor = sessionStore.getSftpExecutor(connectInfo.getFileNameCharset());
|
||||||
executor.connect();
|
executor.connect();
|
||||||
@@ -152,8 +152,8 @@ public class HostSftpServiceImpl implements HostSftpService {
|
|||||||
@Override
|
@Override
|
||||||
public void setFileContentByToken(String token, MultipartFile file) {
|
public void setFileContentByToken(String token, MultipartFile file) {
|
||||||
// 解析 token
|
// 解析 token
|
||||||
String key = HostTerminalCacheKeyDefine.SFTP_SET_CONTENT.format(token);
|
String key = TerminalCacheKeyDefine.TERMINAL_SFTP_SET_CONTENT.format(token);
|
||||||
SftpSetContentCacheDTO cache = RedisStrings.getJson(key, HostTerminalCacheKeyDefine.SFTP_SET_CONTENT);
|
SftpSetContentCacheDTO cache = RedisStrings.getJson(key, TerminalCacheKeyDefine.TERMINAL_SFTP_SET_CONTENT);
|
||||||
Valid.notNull(cache, ErrorMessage.FILE_ABSENT);
|
Valid.notNull(cache, ErrorMessage.FILE_ABSENT);
|
||||||
// 删除缓存
|
// 删除缓存
|
||||||
RedisStrings.delete(key);
|
RedisStrings.delete(key);
|
||||||
@@ -164,7 +164,7 @@ public class HostSftpServiceImpl implements HostSftpService {
|
|||||||
InputStream in = null;
|
InputStream in = null;
|
||||||
try {
|
try {
|
||||||
// 获取终端连接信息
|
// 获取终端连接信息
|
||||||
HostTerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(SecurityUtils.getLoginUserId(), cache.getHostId());
|
TerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(SecurityUtils.getLoginUserId(), cache.getHostId());
|
||||||
sessionStore = SessionStores.openSessionStore(connectInfo);
|
sessionStore = SessionStores.openSessionStore(connectInfo);
|
||||||
executor = sessionStore.getSftpExecutor(connectInfo.getFileNameCharset());
|
executor = sessionStore.getSftpExecutor(connectInfo.getFileNameCharset());
|
||||||
executor.connect();
|
executor.connect();
|
||||||
@@ -220,7 +220,7 @@ public class HostSftpServiceImpl implements HostSftpService {
|
|||||||
query.setLimit(request.getLimit());
|
query.setLimit(request.getLimit());
|
||||||
if (Strings.isBlank(type)) {
|
if (Strings.isBlank(type)) {
|
||||||
// 查询全部 SFTP 类型
|
// 查询全部 SFTP 类型
|
||||||
query.setTypeList(HostTerminalOperatorType.SFTP_TYPES);
|
query.setTypeList(TerminalOperatorType.SFTP_TYPES);
|
||||||
} else {
|
} else {
|
||||||
query.setType(type);
|
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.entity.vo.TerminalConnectLogVO;
|
||||||
import com.orion.visor.module.asset.enums.TerminalConnectStatusEnum;
|
import com.orion.visor.module.asset.enums.TerminalConnectStatusEnum;
|
||||||
import com.orion.visor.module.asset.enums.TerminalConnectTypeEnum;
|
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.model.TerminalConfig;
|
||||||
import com.orion.visor.module.asset.handler.host.terminal.session.ITerminalSession;
|
import com.orion.visor.module.asset.handler.host.terminal.session.ITerminalSession;
|
||||||
import com.orion.visor.module.asset.service.TerminalConnectLogService;
|
import com.orion.visor.module.asset.service.TerminalConnectLogService;
|
||||||
@@ -67,7 +67,7 @@ public class TerminalConnectLogServiceImpl implements TerminalConnectLogService
|
|||||||
private TerminalConnectLogDAO terminalConnectLogDAO;
|
private TerminalConnectLogDAO terminalConnectLogDAO;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private HostTerminalManager hostTerminalManager;
|
private TerminalManager terminalManager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TerminalConnectLogDO create(TerminalConnectTypeEnum type, TerminalConnectLogCreateRequest request) {
|
public TerminalConnectLogDO create(TerminalConnectTypeEnum type, TerminalConnectLogCreateRequest request) {
|
||||||
@@ -103,7 +103,7 @@ public class TerminalConnectLogServiceImpl implements TerminalConnectLogService
|
|||||||
@Override
|
@Override
|
||||||
public List<TerminalConnectLogVO> getTerminalConnectSessions(TerminalConnectLogQueryRequest request) {
|
public List<TerminalConnectLogVO> getTerminalConnectSessions(TerminalConnectLogQueryRequest request) {
|
||||||
// 查询全部
|
// 查询全部
|
||||||
List<Long> idList = hostTerminalManager.getChannelSessions()
|
List<Long> idList = terminalManager.getChannelSessions()
|
||||||
.values()
|
.values()
|
||||||
.stream()
|
.stream()
|
||||||
.map(ConcurrentHashMap::values)
|
.map(ConcurrentHashMap::values)
|
||||||
@@ -246,7 +246,7 @@ public class TerminalConnectLogServiceImpl implements TerminalConnectLogService
|
|||||||
OperatorLogs.add(OperatorLogs.HOST_NAME, record.getHostName());
|
OperatorLogs.add(OperatorLogs.HOST_NAME, record.getHostName());
|
||||||
// 获取会话
|
// 获取会话
|
||||||
TerminalConnectLogExtraDTO extra = JSON.parseObject(record.getExtraInfo(), TerminalConnectLogExtraDTO.class);
|
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) {
|
if (session != null) {
|
||||||
// 关闭会话
|
// 关闭会话
|
||||||
session.forceOffline();
|
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.HostDAO;
|
||||||
import com.orion.visor.module.asset.dao.HostIdentityDAO;
|
import com.orion.visor.module.asset.dao.HostIdentityDAO;
|
||||||
import com.orion.visor.module.asset.dao.HostKeyDAO;
|
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.HostDO;
|
||||||
import com.orion.visor.module.asset.entity.domain.HostIdentityDO;
|
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.domain.HostKeyDO;
|
||||||
import com.orion.visor.module.asset.entity.dto.HostTerminalAccessDTO;
|
import com.orion.visor.module.asset.entity.dto.TerminalAccessDTO;
|
||||||
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.dto.HostTerminalTransferDTO;
|
import com.orion.visor.module.asset.entity.dto.TerminalTransferDTO;
|
||||||
import com.orion.visor.module.asset.entity.vo.HostTerminalThemeVO;
|
import com.orion.visor.module.asset.entity.vo.TerminalThemeVO;
|
||||||
import com.orion.visor.module.asset.enums.*;
|
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.config.model.HostSshConfigModel;
|
||||||
import com.orion.visor.module.asset.handler.host.extra.model.HostSshExtraModel;
|
import com.orion.visor.module.asset.handler.host.extra.model.HostSshExtraModel;
|
||||||
@@ -89,14 +89,14 @@ public class TerminalServiceImpl implements TerminalService {
|
|||||||
private DictValueApi dictValueApi;
|
private DictValueApi dictValueApi;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<HostTerminalThemeVO> getTerminalThemes() {
|
public List<TerminalThemeVO> getTerminalThemes() {
|
||||||
// if (true) {
|
// if (true) {
|
||||||
// String arr = "";
|
// String arr = "";
|
||||||
// return JSON.parseArray(arr, HostTerminalThemeVO.class);
|
// return JSON.parseArray(arr, HostTerminalThemeVO.class);
|
||||||
// }
|
// }
|
||||||
List<JSONObject> themes = dictValueApi.getDictValue(THEME_DICT_KEY);
|
List<JSONObject> themes = dictValueApi.getDictValue(THEME_DICT_KEY);
|
||||||
return themes.stream()
|
return themes.stream()
|
||||||
.map(s -> HostTerminalThemeVO.builder()
|
.map(s -> TerminalThemeVO.builder()
|
||||||
.name(s.getString(ExtraFieldConst.LABEL))
|
.name(s.getString(ExtraFieldConst.LABEL))
|
||||||
.dark(s.getBoolean(ExtraFieldConst.DARK))
|
.dark(s.getBoolean(ExtraFieldConst.DARK))
|
||||||
.schema(s.getJSONObject(ExtraFieldConst.VALUE))
|
.schema(s.getJSONObject(ExtraFieldConst.VALUE))
|
||||||
@@ -109,13 +109,13 @@ public class TerminalServiceImpl implements TerminalService {
|
|||||||
LoginUser user = Valid.notNull(SecurityUtils.getLoginUser());
|
LoginUser user = Valid.notNull(SecurityUtils.getLoginUser());
|
||||||
log.info("HostTerminalService.getTerminalAccessToken userId: {}", user.getId());
|
log.info("HostTerminalService.getTerminalAccessToken userId: {}", user.getId());
|
||||||
String accessToken = UUIds.random19();
|
String accessToken = UUIds.random19();
|
||||||
HostTerminalAccessDTO access = HostTerminalAccessDTO.builder()
|
TerminalAccessDTO access = TerminalAccessDTO.builder()
|
||||||
.userId(user.getId())
|
.userId(user.getId())
|
||||||
.username(user.getUsername())
|
.username(user.getUsername())
|
||||||
.build();
|
.build();
|
||||||
// 设置 access 缓存
|
// 设置 access 缓存
|
||||||
String key = HostTerminalCacheKeyDefine.HOST_TERMINAL_ACCESS.format(accessToken);
|
String key = TerminalCacheKeyDefine.TERMINAL_ACCESS.format(accessToken);
|
||||||
RedisStrings.setJson(key, HostTerminalCacheKeyDefine.HOST_TERMINAL_ACCESS, access);
|
RedisStrings.setJson(key, TerminalCacheKeyDefine.TERMINAL_ACCESS, access);
|
||||||
return accessToken;
|
return accessToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,21 +124,21 @@ public class TerminalServiceImpl implements TerminalService {
|
|||||||
LoginUser user = Valid.notNull(SecurityUtils.getLoginUser());
|
LoginUser user = Valid.notNull(SecurityUtils.getLoginUser());
|
||||||
log.info("HostTerminalService.getTerminalTransferToken userId: {}", user.getId());
|
log.info("HostTerminalService.getTerminalTransferToken userId: {}", user.getId());
|
||||||
String transferToken = UUIds.random19();
|
String transferToken = UUIds.random19();
|
||||||
HostTerminalTransferDTO transfer = HostTerminalTransferDTO.builder()
|
TerminalTransferDTO transfer = TerminalTransferDTO.builder()
|
||||||
.userId(user.getId())
|
.userId(user.getId())
|
||||||
.username(user.getUsername())
|
.username(user.getUsername())
|
||||||
.build();
|
.build();
|
||||||
// 设置 transfer 缓存
|
// 设置 transfer 缓存
|
||||||
String key = HostTerminalCacheKeyDefine.HOST_TERMINAL_TRANSFER.format(transferToken);
|
String key = TerminalCacheKeyDefine.TERMINAL_TRANSFER.format(transferToken);
|
||||||
RedisStrings.setJson(key, HostTerminalCacheKeyDefine.HOST_TERMINAL_TRANSFER, transfer);
|
RedisStrings.setJson(key, TerminalCacheKeyDefine.TERMINAL_TRANSFER, transfer);
|
||||||
return transferToken;
|
return transferToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HostTerminalAccessDTO getAccessInfoByToken(String token) {
|
public TerminalAccessDTO getAccessInfoByToken(String token) {
|
||||||
// 获取缓存
|
// 获取缓存
|
||||||
String key = HostTerminalCacheKeyDefine.HOST_TERMINAL_ACCESS.format(token);
|
String key = TerminalCacheKeyDefine.TERMINAL_ACCESS.format(token);
|
||||||
HostTerminalAccessDTO access = RedisStrings.getJson(key, HostTerminalCacheKeyDefine.HOST_TERMINAL_ACCESS);
|
TerminalAccessDTO access = RedisStrings.getJson(key, TerminalCacheKeyDefine.TERMINAL_ACCESS);
|
||||||
// 删除缓存
|
// 删除缓存
|
||||||
if (access != null) {
|
if (access != null) {
|
||||||
RedisStrings.delete(key);
|
RedisStrings.delete(key);
|
||||||
@@ -147,10 +147,10 @@ public class TerminalServiceImpl implements TerminalService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HostTerminalTransferDTO getTransferInfoByToken(String token) {
|
public TerminalTransferDTO getTransferInfoByToken(String token) {
|
||||||
// 获取缓存
|
// 获取缓存
|
||||||
String key = HostTerminalCacheKeyDefine.HOST_TERMINAL_TRANSFER.format(token);
|
String key = TerminalCacheKeyDefine.TERMINAL_TRANSFER.format(token);
|
||||||
HostTerminalTransferDTO transfer = RedisStrings.getJson(key, HostTerminalCacheKeyDefine.HOST_TERMINAL_TRANSFER);
|
TerminalTransferDTO transfer = RedisStrings.getJson(key, TerminalCacheKeyDefine.TERMINAL_TRANSFER);
|
||||||
// 删除缓存
|
// 删除缓存
|
||||||
if (transfer != null) {
|
if (transfer != null) {
|
||||||
RedisStrings.delete(key);
|
RedisStrings.delete(key);
|
||||||
@@ -159,7 +159,7 @@ public class TerminalServiceImpl implements TerminalService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HostTerminalConnectDTO getTerminalConnectInfo(Long hostId) {
|
public TerminalConnectDTO getTerminalConnectInfo(Long hostId) {
|
||||||
log.info("HostTerminalService.getTerminalConnectInfo-withHost hostId: {}", hostId);
|
log.info("HostTerminalService.getTerminalConnectInfo-withHost hostId: {}", hostId);
|
||||||
// 查询主机
|
// 查询主机
|
||||||
HostDO host = hostDAO.selectById(hostId);
|
HostDO host = hostDAO.selectById(hostId);
|
||||||
@@ -170,7 +170,7 @@ public class TerminalServiceImpl implements TerminalService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HostTerminalConnectDTO getTerminalConnectInfo(Long userId, Long hostId) {
|
public TerminalConnectDTO getTerminalConnectInfo(Long userId, Long hostId) {
|
||||||
// 查询主机
|
// 查询主机
|
||||||
HostDO host = hostDAO.selectById(hostId);
|
HostDO host = hostDAO.selectById(hostId);
|
||||||
Valid.notNull(host, ErrorMessage.HOST_ABSENT);
|
Valid.notNull(host, ErrorMessage.HOST_ABSENT);
|
||||||
@@ -179,7 +179,7 @@ public class TerminalServiceImpl implements TerminalService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HostTerminalConnectDTO getTerminalConnectInfo(Long userId, HostDO host) {
|
public TerminalConnectDTO getTerminalConnectInfo(Long userId, HostDO host) {
|
||||||
Long hostId = host.getId();
|
Long hostId = host.getId();
|
||||||
log.info("HostTerminalService.getTerminalConnectInfo hostId: {}, userId: {}", hostId, userId);
|
log.info("HostTerminalService.getTerminalConnectInfo hostId: {}, userId: {}", hostId, userId);
|
||||||
// 验证主机是否有权限
|
// 验证主机是否有权限
|
||||||
@@ -220,11 +220,11 @@ public class TerminalServiceImpl implements TerminalService {
|
|||||||
* @param extra extra
|
* @param extra extra
|
||||||
* @return session
|
* @return session
|
||||||
*/
|
*/
|
||||||
private HostTerminalConnectDTO getHostConnectInfo(HostDO host,
|
private TerminalConnectDTO getHostConnectInfo(HostDO host,
|
||||||
HostSshConfigModel config,
|
HostSshConfigModel config,
|
||||||
HostSshExtraModel extra) {
|
HostSshExtraModel extra) {
|
||||||
// 填充认证信息
|
// 填充认证信息
|
||||||
HostTerminalConnectDTO conn = new HostTerminalConnectDTO();
|
TerminalConnectDTO conn = new TerminalConnectDTO();
|
||||||
conn.setHostId(host.getId());
|
conn.setHostId(host.getId());
|
||||||
conn.setHostName(host.getName());
|
conn.setHostName(host.getName());
|
||||||
conn.setHostAddress(host.getAddress());
|
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
|
@Resource
|
||||||
private AppTerminalConnectLogAutoClearConfig appTerminalConnectLogAutoClearConfig;
|
private AppTerminalConnectLogAutoClearConfig appTerminalConnectLogAutoClearConfig;
|
||||||
|
|||||||
@@ -61,13 +61,13 @@ export function getTerminalTransferToken() {
|
|||||||
/**
|
/**
|
||||||
* 打开终端 websocket
|
* 打开终端 websocket
|
||||||
*/
|
*/
|
||||||
export const openHostTerminalChannel = (accessToken: string) => {
|
export const openTerminalAccessChannel = (accessToken: string) => {
|
||||||
return createAppWebSocket(`/host/terminal/${accessToken}`);
|
return createAppWebSocket(`/terminal/access/${accessToken}`);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 打开终端传输 websocket
|
* 打开终端传输 websocket
|
||||||
*/
|
*/
|
||||||
export const openHostTransferChannel = (accessToken: string) => {
|
export const openTerminalTransferChannel = (accessToken: string) => {
|
||||||
return createAppWebSocket(`/host/transfer/${accessToken}`);
|
return createAppWebSocket(`/terminal/transfer/${accessToken}`);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import type { ISftpTransferHandler, ISftpTransferManager, SftpFile, SftpTransferItem, TransferOperatorResponse } from '../types/define';
|
import type { ISftpTransferHandler, ISftpTransferManager, SftpFile, SftpTransferItem, TransferOperatorResponse } from '../types/define';
|
||||||
import { sessionCloseMsg, TransferReceiver, TransferStatus, TransferType } from '../types/const';
|
import { sessionCloseMsg, TransferReceiver, TransferStatus, TransferType } from '../types/const';
|
||||||
import { Message } from '@arco-design/web-vue';
|
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 { nextId } from '@/utils';
|
||||||
import SftpTransferUploader from './sftp-transfer-uploader';
|
import SftpTransferUploader from './sftp-transfer-uploader';
|
||||||
import SftpTransferDownloader from './sftp-transfer-downloader';
|
import SftpTransferDownloader from './sftp-transfer-downloader';
|
||||||
@@ -109,7 +109,7 @@ export default class SftpTransferManager implements ISftpTransferManager {
|
|||||||
const { data: transferToken } = await getTerminalTransferToken();
|
const { data: transferToken } = await getTerminalTransferToken();
|
||||||
// 打开会话
|
// 打开会话
|
||||||
try {
|
try {
|
||||||
this.client = await openHostTransferChannel(transferToken);
|
this.client = await openTerminalTransferChannel(transferToken);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// 打开失败将传输列表置为失效
|
// 打开失败将传输列表置为失效
|
||||||
Message.error('会话打开失败');
|
Message.error('会话打开失败');
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import type { ITerminalChannel, ITerminalOutputProcessor, ITerminalSessionManage
|
|||||||
import type { InputPayload, Protocol } from '@/types/protocol/terminal.protocol';
|
import type { InputPayload, Protocol } from '@/types/protocol/terminal.protocol';
|
||||||
import { format, OutputProtocol, parse } from '@/types/protocol/terminal.protocol';
|
import { format, OutputProtocol, parse } from '@/types/protocol/terminal.protocol';
|
||||||
import { sessionCloseMsg } from '../types/const';
|
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 { Message } from '@arco-design/web-vue';
|
||||||
import TerminalOutputProcessor from './terminal-output-processor';
|
import TerminalOutputProcessor from './terminal-output-processor';
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ export default class TerminalChannel implements ITerminalChannel {
|
|||||||
const { data: accessToken } = await getTerminalAccessToken();
|
const { data: accessToken } = await getTerminalAccessToken();
|
||||||
// 打开会话
|
// 打开会话
|
||||||
try {
|
try {
|
||||||
this.client = await openHostTerminalChannel(accessToken);
|
this.client = await openTerminalAccessChannel(accessToken);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
Message.error('无法连接至服务器');
|
Message.error('无法连接至服务器');
|
||||||
console.error('terminal error', e);
|
console.error('terminal error', e);
|
||||||
|
|||||||
Reference in New Issue
Block a user