diff --git a/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java b/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java index 5852b1af..715e246c 100644 --- a/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java +++ b/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java @@ -71,6 +71,8 @@ public interface ErrorMessage { String ANY_NO_PERMISSION = "{}无权限"; + String SESSION_PRESENT = "会话已存在"; + String SESSION_ABSENT = "会话不存在"; } diff --git a/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/ExtraFieldConst.java b/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/ExtraFieldConst.java index 690c3192..fefc3f5b 100644 --- a/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/ExtraFieldConst.java +++ b/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/ExtraFieldConst.java @@ -13,8 +13,6 @@ public interface ExtraFieldConst extends FieldConst { String TRACE_ID = "traceId"; - String SESSION_ID = "sessionId"; - String IDENTITY = "identity"; String GROUP_NAME = "groupName"; @@ -33,4 +31,8 @@ public interface ExtraFieldConst extends FieldConst { String GRANT_NAME = "grantName"; + String CHANNEL_ID = "channelId"; + + String SESSION_ID = "sessionId"; + } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/config/AssetWebSocketConfiguration.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/config/AssetWebSocketConfiguration.java index b25e93b2..4b5ac9a9 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/config/AssetWebSocketConfiguration.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/config/AssetWebSocketConfiguration.java @@ -31,7 +31,7 @@ public class AssetWebSocketConfiguration implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { // 终端 - registry.addHandler(terminalMessageDispatcher, prefix + "/host/terminal/{token}") + registry.addHandler(terminalMessageDispatcher, prefix + "/host/terminal/{accessToken}") .addInterceptors(terminalAccessInterceptor) .setAllowedOrigins("*"); } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostTerminalController.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostTerminalController.java index 9ea09182..25e2cc74 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostTerminalController.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostTerminalController.java @@ -1,7 +1,7 @@ package com.orion.ops.module.asset.controller; -import com.orion.ops.framework.security.core.utils.SecurityUtils; import com.orion.ops.framework.web.core.annotation.RestWrapper; +import com.orion.ops.module.asset.entity.vo.HostTerminalAccessVO; import com.orion.ops.module.asset.service.HostTerminalService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -36,8 +36,8 @@ public class HostTerminalController { @GetMapping("/access") @Operation(summary = "获取主机终端 accessToken") @PreAuthorize("@ss.hasPermission('asset:host-terminal:access')") - public String getHostTerminalAccessToken() { - return hostTerminalService.getHostTerminalAccessToken(SecurityUtils.getLoginUserId()); + public HostTerminalAccessVO getHostTerminalAccessToken() { + return hostTerminalService.getHostTerminalAccessToken(); } } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostTerminalAccessDTO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostTerminalAccessDTO.java index 389c993e..58661d61 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostTerminalAccessDTO.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostTerminalAccessDTO.java @@ -25,4 +25,7 @@ public class HostTerminalAccessDTO { @Schema(description = "userId") private Long userId; + @Schema(description = "username") + private String username; + } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostTerminalAccessVO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostTerminalAccessVO.java new file mode 100644 index 00000000..c27696a0 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostTerminalAccessVO.java @@ -0,0 +1,33 @@ +package com.orion.ops.module.asset.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 主机终端访问 响应对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2024/1/4 15:42 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "HostTerminalAccessVO", description = "主机终端访问 响应对象") +public class HostTerminalAccessVO implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "accessToken") + private String accessToken; + + @Schema(description = "session 起始量") + private String sessionInitial; + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/enums/InputTypeEnum.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/enums/InputTypeEnum.java index 920f8403..871c5910 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/enums/InputTypeEnum.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/enums/InputTypeEnum.java @@ -20,7 +20,7 @@ import javax.annotation.PostConstruct; public enum InputTypeEnum { /** - * 主机连接检查 置换token / 检查权限 + * 主机连接检查 */ CHECK("ck", TerminalCheckHandler.class, @@ -106,7 +106,7 @@ public enum InputTypeEnum { return null; } for (InputTypeEnum value : values()) { - if (payload.startsWith(value.type + SEPARATOR) || value.type.equals(payload)) { + if (payload.startsWith(value.type + SEPARATOR) || payload.equals(value.type)) { return value; } } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/enums/OutputTypeEnum.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/enums/OutputTypeEnum.java index 99523ac7..ae456606 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/enums/OutputTypeEnum.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/enums/OutputTypeEnum.java @@ -18,7 +18,7 @@ public enum OutputTypeEnum { /** * 主机连接检查 */ - CHECK("ck", "${type}|${session}|${token}|${result}|${errorMessage}"), + CHECK("ck", "${type}|${session}|${result}|${errorMessage}"), /** * 主机连接 diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/handler/AbstractTerminalHandler.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/handler/AbstractTerminalHandler.java index 0d58ae91..9f9115b1 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/handler/AbstractTerminalHandler.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/handler/AbstractTerminalHandler.java @@ -17,38 +17,38 @@ public abstract class AbstractTerminalHandler imp /** * 发送消息 * - * @param session session + * @param channel channel * @param type type * @param body body * @param E */ - public void send(WebSocketSession session, OutputTypeEnum type, E body) { + public void send(WebSocketSession channel, OutputTypeEnum type, E body) { body.setType(type.getType()); // 发送消息 - this.send(session, type.format(body)); + this.send(channel, type.format(body)); } /** * 发送消息 * - * @param session session + * @param channel channel * @param message message */ - protected void send(WebSocketSession session, String message) { - WebSockets.sendText(session, message); + protected void send(WebSocketSession channel, String message) { + WebSockets.sendText(channel, message); } /** * 获取属性 * - * @param session session + * @param channel channel * @param attr attr * @param T * @return T */ @SuppressWarnings("unchecked") - protected E getAttr(WebSocketSession session, String attr) { - return (E) session.getAttributes().get(attr); + protected E getAttr(WebSocketSession channel, String attr) { + return (E) channel.getAttributes().get(attr); } } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/handler/ITerminalHandler.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/handler/ITerminalHandler.java index a42bee2a..145d56e0 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/handler/ITerminalHandler.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/handler/ITerminalHandler.java @@ -15,9 +15,9 @@ public interface ITerminalHandler { /** * 处理消息 * - * @param session session + * @param channel channel * @param payload payload */ - void handle(WebSocketSession session, T payload); + void handle(WebSocketSession channel, T payload); } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/handler/TerminalCheckHandler.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/handler/TerminalCheckHandler.java index 293352cd..095f25ef 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/handler/TerminalCheckHandler.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/handler/TerminalCheckHandler.java @@ -1,6 +1,5 @@ package com.orion.ops.module.asset.handler.host.terminal.handler; -import com.orion.lang.id.UUIds; import com.orion.lang.utils.collect.Maps; import com.orion.ops.framework.biz.operator.log.core.service.OperatorLogFrameworkService; import com.orion.ops.framework.biz.operator.log.core.uitls.OperatorLogFiller; @@ -16,8 +15,10 @@ import com.orion.ops.module.asset.entity.request.host.HostConnectLogCreateReques import com.orion.ops.module.asset.enums.HostConnectStatusEnum; import com.orion.ops.module.asset.enums.HostConnectTypeEnum; import com.orion.ops.module.asset.handler.host.terminal.enums.OutputTypeEnum; +import com.orion.ops.module.asset.handler.host.terminal.manager.TerminalManager; import com.orion.ops.module.asset.handler.host.terminal.model.request.TerminalCheckRequest; import com.orion.ops.module.asset.handler.host.terminal.model.response.TerminalCheckResponse; +import com.orion.ops.module.asset.handler.host.terminal.session.ITerminalSession; import com.orion.ops.module.asset.service.HostConnectLogService; import com.orion.ops.module.asset.service.HostTerminalService; import lombok.extern.slf4j.Slf4j; @@ -50,26 +51,25 @@ public class TerminalCheckHandler extends AbstractTerminalHandler extra = Maps.newMap(); extra.put(OperatorLogs.ID, hostId); extra.put(OperatorLogs.NAME, hostName); - extra.put(OperatorLogs.TOKEN, terminalToken); - extra.put(OperatorLogs.SESSION_ID, session.getId()); + extra.put(OperatorLogs.CHANNEL_ID, channel.getId()); + extra.put(OperatorLogs.SESSION_ID, sessionId); // 日志参数 OperatorLogFiller logModel = OperatorLogFiller.create() // 填充用户信息 .fillUserInfo(userId, username) // 填充 traceId - .fillTraceId(this.getAttr(session, ExtraFieldConst.TRACE_ID)) + .fillTraceId(this.getAttr(channel, ExtraFieldConst.TRACE_ID)) // 填充请求留痕信息 - .fillIdentity(this.getAttr(session, ExtraFieldConst.IDENTITY)) + .fillIdentity(this.getAttr(channel, ExtraFieldConst.IDENTITY)) // 填充使用时间 .fillUsedTime(startTime) // 填充结果信息 @@ -147,7 +197,7 @@ public class TerminalCheckHandler extends AbstractTerminalHandler { @Override - public void handle(WebSocketSession session, TerminalBasePayload payload) { + public void handle(WebSocketSession channel, TerminalBasePayload payload) { // 发送 pong - this.send(session, OutputTypeEnum.PONG.getType()); + this.send(channel, OutputTypeEnum.PONG.getType()); } } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/handler/TerminalResizeHandler.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/handler/TerminalResizeHandler.java index 1b39bc50..7b5283ad 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/handler/TerminalResizeHandler.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/handler/TerminalResizeHandler.java @@ -24,9 +24,9 @@ public class TerminalResizeHandler extends AbstractTerminalHandler sessions = MultiConcurrentHashMap.create(); + private final MultiConcurrentHashMap channelSessions = MultiConcurrentHashMap.create(); /** * 添加会话 * - * @param terminalSession terminalSession + * @param session session */ - public void addSession(TerminalSession terminalSession) { - sessions.put(terminalSession.getSession().getId(), terminalSession.getToken(), terminalSession); + public void addSession(TerminalSession session) { + channelSessions.put(session.getChannel().getId(), session.getSessionId(), session); } /** * 获取会话 * - * @param id id - * @param token token + * @param channelId channelId + * @param sessionId sessionId * @return session */ - public ITerminalSession getSession(String id, String token) { - return sessions.get(id, token); + public ITerminalSession getSession(String channelId, String sessionId) { + return channelSessions.get(channelId, sessionId); } /** * 关闭会话 * - * @param id id - * @param token token + * @param channelId channelId + * @param sessionId sessionId */ - public void closeSession(String id, String token) { + public void closeSession(String channelId, String sessionId) { // 获取并移除 - ITerminalSession session = sessions.removeElement(id, token); + ITerminalSession session = channelSessions.removeElement(channelId, sessionId); if (session != null) { Streams.close(session); } @@ -61,11 +61,11 @@ public class TerminalManager { /** * 关闭全部会话 * - * @param id id + * @param channelId channelId */ - public void closeAll(String id) { + public void closeAll(String channelId) { // 获取并移除 - ConcurrentHashMap session = sessions.remove(id); + ConcurrentHashMap session = channelSessions.remove(channelId); if (Maps.isEmpty(session)) { session.values().forEach(Streams::close); } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/model/response/TerminalCheckResponse.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/model/response/TerminalCheckResponse.java index e8d0b826..4fbd391d 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/model/response/TerminalCheckResponse.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/model/response/TerminalCheckResponse.java @@ -23,9 +23,6 @@ import lombok.experimental.SuperBuilder; @Schema(name = "TerminalCheckResponse", description = "主机连接检查响应 实体对象") public class TerminalCheckResponse extends TerminalBasePayload { - @Schema(description = "token") - private String token; - @Schema(description = "检查结果") private Integer result; diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/session/TerminalSession.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/session/TerminalSession.java index 658b1527..683cb8b8 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/session/TerminalSession.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/session/TerminalSession.java @@ -32,10 +32,10 @@ import java.io.InputStream; public class TerminalSession implements ITerminalSession { @Getter - private final String token; + private final String sessionId; @Getter - private final WebSocketSession session; + private final WebSocketSession channel; private final TerminalConfig config; @@ -48,12 +48,12 @@ public class TerminalSession implements ITerminalSession { private volatile boolean close; - public TerminalSession(String token, - WebSocketSession session, + public TerminalSession(String sessionId, + WebSocketSession channel, SessionStore sessionStore, TerminalConfig config) { - this.token = token; - this.session = session; + this.sessionId = sessionId; + this.channel = channel; this.sessionStore = sessionStore; this.config = config; } @@ -104,10 +104,10 @@ public class TerminalSession implements ITerminalSession { Streams.close(executor); Streams.close(sessionStore); } catch (Exception e) { - log.error("terminal 断开连接 失败 token: {}", token, e); + log.error("terminal 断开连接失败 {}", sessionId, e); } // 修改状态 - SpringHolder.getBean(HostConnectLogService.class).updateStatusByToken(token, HostConnectStatusEnum.COMPLETE); + SpringHolder.getBean(HostConnectLogService.class).updateStatusByToken(sessionId, HostConnectStatusEnum.COMPLETE); } /** @@ -120,22 +120,22 @@ public class TerminalSession implements ITerminalSession { BufferedInputStream in = new BufferedInputStream(inputStream, Const.BUFFER_KB_4); int read; try { - while (session.isOpen() && (read = in.read(bs)) != -1) { + while (channel.isOpen() && (read = in.read(bs)) != -1) { String body = lastLine = new String(bs, 0, read, config.getCharset()); // 响应 TerminalOutputResponse resp = TerminalOutputResponse.builder() - .session(token) + .session(sessionId) .type(OutputTypeEnum.OUTPUT.getType()) .body(body) .build(); - WebSockets.sendText(session, OutputTypeEnum.OUTPUT.format(resp)); + WebSockets.sendText(channel, OutputTypeEnum.OUTPUT.format(resp)); } } catch (IOException ex) { log.error("terminal 读取流失败", ex); } // eof if (close) { - log.info("terminal eof回调 {}", token); + log.info("terminal eof回调 {}", sessionId); } } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/interceptor/TerminalAccessInterceptor.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/interceptor/TerminalAccessInterceptor.java index 963c50d6..a3e9b1ec 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/interceptor/TerminalAccessInterceptor.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/interceptor/TerminalAccessInterceptor.java @@ -4,6 +4,7 @@ import com.orion.lang.utils.Urls; import com.orion.ops.framework.common.constant.ExtraFieldConst; import com.orion.ops.framework.common.meta.TraceIdHolder; import com.orion.ops.framework.common.utils.Requests; +import com.orion.ops.module.asset.entity.dto.HostTerminalAccessDTO; import com.orion.ops.module.asset.service.HostTerminalService; import lombok.extern.slf4j.Slf4j; import org.springframework.http.server.ServerHttpRequest; @@ -31,24 +32,20 @@ public class TerminalAccessInterceptor implements HandshakeInterceptor { @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) throws Exception { - // 获取 token - String token = Urls.getUrlSource(request.getURI().getPath()); - log.info("TerminalInterceptor-beforeHandshake start token: {}", token); - attributes.put(ExtraFieldConst.USER_ID, 1L); - attributes.put(ExtraFieldConst.USERNAME, "1"); + // 获取 accessToken + String accessToken = Urls.getUrlSource(request.getURI().getPath()); + log.info("TerminalInterceptor-beforeHandshake start accessToken: {}", accessToken); + // 获取连接数据 + HostTerminalAccessDTO access = hostTerminalService.getAccessInfoByToken(accessToken); + if (access == null) { + log.error("TerminalInterceptor-beforeHandshake absent accessToken: {}", accessToken); + return false; + } + // 设置参数 + attributes.put(ExtraFieldConst.USER_ID, access.getUserId()); + attributes.put(ExtraFieldConst.USERNAME, access.getUsername()); attributes.put(ExtraFieldConst.TRACE_ID, TraceIdHolder.get()); attributes.put(ExtraFieldConst.IDENTITY, Requests.getIdentity()); - // 获取连接数据 - // HostTerminalAccessDTO access = hostTerminalService.getAccessInfoByToken(token); - // if (access == null) { - // log.error("TerminalInterceptor-beforeHandshake absent token: {}", token); - // return false; - // } - // // 设置参数 - // attributes.put(ExtraFieldConst.USER_ID, access.getUserId()); - // attributes.put(ExtraFieldConst.USERNAME, access.getUsername()); - // attributes.put(ExtraFieldConst.TRACE_ID, TraceIdHolder.get()); - // attributes.put(ExtraFieldConst.IDENTITY, Requests.getIdentity()); return true; } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/HostTerminalService.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/HostTerminalService.java index a57a8628..caa6bc83 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/HostTerminalService.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/HostTerminalService.java @@ -4,6 +4,7 @@ import com.orion.net.host.SessionStore; import com.orion.ops.module.asset.entity.domain.HostDO; import com.orion.ops.module.asset.entity.dto.HostTerminalAccessDTO; import com.orion.ops.module.asset.entity.dto.HostTerminalConnectDTO; +import com.orion.ops.module.asset.entity.vo.HostTerminalAccessVO; /** * 主机终端服务 @@ -17,10 +18,9 @@ public interface HostTerminalService { /** * 获取主机终端访问 accessToken * - * @param userId userId * @return session */ - String getHostTerminalAccessToken(Long userId); + HostTerminalAccessVO getHostTerminalAccessToken(); /** * 通过 accessToken 获取主机终端访问信息 diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostTerminalServiceImpl.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostTerminalServiceImpl.java index 5cc9d982..2bdc9210 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostTerminalServiceImpl.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostTerminalServiceImpl.java @@ -8,9 +8,11 @@ import com.orion.net.host.SessionHolder; import com.orion.net.host.SessionStore; import com.orion.ops.framework.common.constant.Const; import com.orion.ops.framework.common.constant.ErrorMessage; +import com.orion.ops.framework.common.security.LoginUser; import com.orion.ops.framework.common.utils.CryptoUtils; import com.orion.ops.framework.common.utils.Valid; import com.orion.ops.framework.redis.core.utils.RedisStrings; +import com.orion.ops.framework.security.core.utils.SecurityUtils; import com.orion.ops.module.asset.dao.HostDAO; import com.orion.ops.module.asset.dao.HostIdentityDAO; import com.orion.ops.module.asset.dao.HostKeyDAO; @@ -20,6 +22,7 @@ import com.orion.ops.module.asset.entity.domain.HostIdentityDO; import com.orion.ops.module.asset.entity.domain.HostKeyDO; import com.orion.ops.module.asset.entity.dto.HostTerminalAccessDTO; import com.orion.ops.module.asset.entity.dto.HostTerminalConnectDTO; +import com.orion.ops.module.asset.entity.vo.HostTerminalAccessVO; import com.orion.ops.module.asset.enums.HostConfigTypeEnum; import com.orion.ops.module.asset.enums.HostExtraItemEnum; import com.orion.ops.module.asset.enums.HostExtraSshAuthTypeEnum; @@ -80,16 +83,22 @@ public class HostTerminalServiceImpl implements HostTerminalService { private SystemUserApi systemUserApi; @Override - public String getHostTerminalAccessToken(Long userId) { - log.info("HostConnectService.getHostAccessToken userId: {}", userId); - String token = UUIds.random32(); + public HostTerminalAccessVO getHostTerminalAccessToken() { + LoginUser user = SecurityUtils.getLoginUser(); + log.info("HostConnectService.getHostAccessToken userId: {}", user.getId()); + String accessToken = UUIds.random19(); HostTerminalAccessDTO access = HostTerminalAccessDTO.builder() - .userId(userId) + .userId(user.getId()) + .username(user.getUsername()) .build(); - // 设置缓存 - String key = HostTerminalCacheKeyDefine.HOST_TERMINAL_ACCESS.format(token); + // 设置 access 缓存 + String key = HostTerminalCacheKeyDefine.HOST_TERMINAL_ACCESS.format(accessToken); RedisStrings.setJson(key, HostTerminalCacheKeyDefine.HOST_TERMINAL_ACCESS, access); - return token; + return HostTerminalAccessVO.builder() + .accessToken(accessToken) + // 32 进制的 uuid 作为起始量 + .sessionInitial(Long.toString(UUIds.random15Long(), 32)) + .build(); } @Override