拆分模块.

This commit is contained in:
lijiahang
2024-10-17 10:20:04 +08:00
parent d82f5b4bfb
commit b33abd3196
27 changed files with 103 additions and 126 deletions

View File

@@ -38,6 +38,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Set;
/**
* 终端连接日志 api
@@ -83,7 +84,7 @@ public class TerminalConnectLogController {
@IgnoreLog(IgnoreLogMode.RET)
@PostMapping("/latest-connect")
@Operation(summary = "查询用户最近连接的主机")
public List<Long> getLatestConnectHostId(@RequestBody TerminalConnectLogQueryRequest request) {
public Set<Long> getLatestConnectHostId(@RequestBody TerminalConnectLogQueryRequest request) {
return terminalConnectLogService.getLatestConnectHostId(request);
}

View File

@@ -23,9 +23,9 @@ import com.orion.visor.framework.log.core.enums.IgnoreLogMode;
import com.orion.visor.framework.web.core.annotation.IgnoreWrapper;
import com.orion.visor.framework.web.core.annotation.RestWrapper;
import com.orion.visor.module.asset.define.operator.TerminalOperatorType;
import com.orion.visor.module.asset.entity.request.host.HostSftpLogQueryRequest;
import com.orion.visor.module.asset.entity.vo.HostSftpLogVO;
import com.orion.visor.module.asset.service.HostSftpService;
import com.orion.visor.module.asset.entity.request.host.TerminalSftpLogQueryRequest;
import com.orion.visor.module.asset.entity.vo.TerminalSftpLogVO;
import com.orion.visor.module.asset.service.TerminalSftpService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -53,27 +53,27 @@ import java.util.List;
@Validated
@RestWrapper
@RestController
@RequestMapping("/asset/host-sftp")
public class HostSftpLogController {
@RequestMapping("/asset/terminal-sftp")
public class TerminalSftpController {
@Resource
private HostSftpService hostSftpService;
private TerminalSftpService terminalSftpService;
@IgnoreLog(IgnoreLogMode.RET)
@PostMapping("/query-log")
@Operation(summary = "分页查询 SFTP 操作日志")
@PreAuthorize("@ss.hasAnyPermission('infra:operator-log:query', 'asset:host-sftp-log:management:query')")
public DataGrid<HostSftpLogVO> getHostSftpLogPage(@Validated(Page.class) @RequestBody HostSftpLogQueryRequest request) {
return hostSftpService.getHostSftpLogPage(request);
@PreAuthorize("@ss.hasAnyPermission('infra:operator-log:query', 'asset:terminal-sftp-log:management:query')")
public DataGrid<TerminalSftpLogVO> getTerminalSftpLogPage(@Validated(Page.class) @RequestBody TerminalSftpLogQueryRequest request) {
return terminalSftpService.getTerminalSftpLogPage(request);
}
@OperatorLog(TerminalOperatorType.DELETE_SFTP_LOG)
@DeleteMapping("/delete-log")
@Operation(summary = "删除 SFTP 操作日志")
@Parameter(name = "idList", description = "idList", required = true)
@PreAuthorize("@ss.hasAnyPermission('infra:operator-log:delete', 'asset:host-sftp-log:management:delete')")
public Integer deleteHostSftpLog(@RequestParam("idList") List<Long> idList) {
return hostSftpService.deleteHostSftpLog(idList);
@PreAuthorize("@ss.hasAnyPermission('infra:operator-log:delete', 'asset:terminal-sftp-log:management:delete')")
public Integer deleteTerminalSftpLog(@RequestParam("idList") List<Long> idList) {
return terminalSftpService.deleteTerminalSftpLog(idList);
}
@IgnoreLog(IgnoreLogMode.RET)
@@ -81,7 +81,7 @@ public class HostSftpLogController {
@Operation(summary = "获取文件内容")
@Parameter(name = "token", description = "token", required = true)
public void getFileContentByToken(@RequestParam("token") String token, HttpServletResponse response) throws Exception {
hostSftpService.getFileContentByToken(token, response);
terminalSftpService.getFileContentByToken(token, response);
}
@PostMapping("/set-content")
@@ -90,7 +90,7 @@ public class HostSftpLogController {
@Parameter(name = "file", description = "file", required = true)
public Boolean setFileContentByToken(@RequestParam("token") String token,
@RequestParam("file") MultipartFile file) throws Exception {
hostSftpService.setFileContentByToken(token, file);
terminalSftpService.setFileContentByToken(token, file);
return true;
}
@@ -104,7 +104,7 @@ public class HostSftpLogController {
public StreamingResponseBody downloadWithTransferToken(@RequestParam("channelId") String channelId,
@RequestParam("transferToken") String transferToken,
HttpServletResponse response) {
return hostSftpService.downloadWithTransferToken(channelId, transferToken, response);
return terminalSftpService.downloadWithTransferToken(channelId, transferToken, response);
}
}

View File

@@ -15,7 +15,7 @@
*/
package com.orion.visor.module.asset.convert;
import com.orion.visor.module.asset.entity.vo.HostSftpLogVO;
import com.orion.visor.module.asset.entity.vo.TerminalSftpLogVO;
import com.orion.visor.module.infra.entity.dto.operator.OperatorLogDTO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@@ -29,11 +29,11 @@ import org.mapstruct.factory.Mappers;
* @since 2023-12-26 22:09
*/
@Mapper
public interface HostSftpLogConvert {
public interface TerminalSftpLogConvert {
HostSftpLogConvert MAPPER = Mappers.getMapper(HostSftpLogConvert.class);
TerminalSftpLogConvert MAPPER = Mappers.getMapper(TerminalSftpLogConvert.class);
@Mapping(target = "extra", ignore = true)
HostSftpLogVO to(OperatorLogDTO request);
TerminalSftpLogVO to(OperatorLogDTO request);
}

View File

@@ -35,8 +35,8 @@ import java.util.Date;
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(name = "HostSftpLogQueryRequest", description = "SFTP 操作日志 查询请求对象")
public class HostSftpLogQueryRequest extends PageRequest {
@Schema(name = "TerminalSftpLogQueryRequest", description = "SFTP 操作日志 查询请求对象")
public class TerminalSftpLogQueryRequest extends PageRequest {
@Schema(description = "用户id")
private Long userId;

View File

@@ -48,7 +48,4 @@ public class AuthorizedHostWrapperVO {
@Schema(description = "分组树节点映射 groupId:hostIdList")
private Map<String, Set<Long>> treeNodes;
@Schema(description = "最近访问的主机")
private Set<Long> latestHosts;
}

View File

@@ -36,8 +36,8 @@ import java.util.Map;
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(name = "HostSftpLogVO", description = "SFTP 操作日志 实体对象")
public class HostSftpLogVO implements Serializable {
@Schema(name = "TerminalSftpLogVO", description = "SFTP 操作日志 实体对象")
public class TerminalSftpLogVO implements Serializable {
private static final long serialVersionUID = 1L;

View File

@@ -28,8 +28,8 @@ import com.orion.visor.framework.common.enums.BooleanBit;
import com.orion.visor.framework.websocket.core.utils.WebSockets;
import com.orion.visor.module.asset.dao.HostDAO;
import com.orion.visor.module.asset.define.operator.TerminalOperatorType;
import com.orion.visor.module.asset.entity.domain.TerminalConnectLogDO;
import com.orion.visor.module.asset.entity.domain.HostDO;
import com.orion.visor.module.asset.entity.domain.TerminalConnectLogDO;
import com.orion.visor.module.asset.entity.dto.TerminalConnectDTO;
import com.orion.visor.module.asset.entity.request.host.TerminalConnectLogCreateRequest;
import com.orion.visor.module.asset.enums.TerminalConnectStatusEnum;

View File

@@ -19,7 +19,7 @@ import com.alibaba.fastjson.JSON;
import com.orion.lang.utils.io.Streams;
import com.orion.visor.module.asset.handler.host.transfer.handler.ITransferHandler;
import com.orion.visor.module.asset.handler.host.transfer.handler.TransferHandler;
import com.orion.visor.module.asset.handler.host.transfer.manager.HostTransferManager;
import com.orion.visor.module.asset.handler.host.transfer.manager.TerminalTransferManager;
import com.orion.visor.module.asset.handler.host.transfer.model.TransferOperatorRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -43,19 +43,19 @@ import javax.annotation.Resource;
public class TransferMessageDispatcher extends AbstractWebSocketHandler {
@Resource
private HostTransferManager hostTransferManager;
private TerminalTransferManager terminalTransferManager;
@Override
public void afterConnectionEstablished(WebSocketSession session) {
log.info("TransferMessageHandler-afterConnectionEstablished id: {}", session.getId());
// 添加处理器
hostTransferManager.putHandler(session.getId(), new TransferHandler(session));
terminalTransferManager.putHandler(session.getId(), new TransferHandler(session));
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) {
// 获取处理器
ITransferHandler handler = hostTransferManager.getHandler(session.getId());
ITransferHandler handler = terminalTransferManager.getHandler(session.getId());
// 处理消息
handler.handleMessage(JSON.parseObject(message.getPayload(), TransferOperatorRequest.class));
}
@@ -63,7 +63,7 @@ public class TransferMessageDispatcher extends AbstractWebSocketHandler {
@Override
protected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) {
// 获取处理器
ITransferHandler handler = hostTransferManager.getHandler(session.getId());
ITransferHandler handler = terminalTransferManager.getHandler(session.getId());
// 添加数据
handler.handleMessage(message.getPayload().array());
}
@@ -78,7 +78,7 @@ public class TransferMessageDispatcher extends AbstractWebSocketHandler {
String id = session.getId();
log.info("TransferMessageHandler-afterConnectionClosed id: {}, code: {}, reason: {}", id, status.getCode(), status.getReason());
// 关闭会话
Streams.close(hostTransferManager.removeHandler(id));
Streams.close(terminalTransferManager.removeHandler(id));
}
}

View File

@@ -21,14 +21,14 @@ import org.springframework.stereotype.Component;
import java.util.concurrent.ConcurrentHashMap;
/**
* 主机传输管理器
* 终端传输管理器
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/6/4 17:58
*/
@Component
public class HostTransferManager {
public class TerminalTransferManager {
private final ConcurrentHashMap<String, ITransferHandler> handlers = new ConcurrentHashMap<>();

View File

@@ -27,7 +27,7 @@ import com.orion.visor.module.asset.enums.TerminalConnectTypeEnum;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Future;
import java.util.Set;
/**
* 终端连接日志 服务类
@@ -79,16 +79,7 @@ public interface TerminalConnectLogService {
* @param request request
* @return hostId
*/
List<Long> getLatestConnectHostId(TerminalConnectLogQueryRequest request);
/**
* 查询用户最近连接的主机
*
* @param type type
* @param userId userId
* @return hostId
*/
Future<List<Long>> getLatestConnectHostIdAsync(TerminalConnectTypeEnum type, Long userId);
Set<Long> getLatestConnectHostId(TerminalConnectLogQueryRequest request);
/**
* 删除终端连接日志

View File

@@ -16,8 +16,8 @@
package com.orion.visor.module.asset.service;
import com.orion.lang.define.wrapper.DataGrid;
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.request.host.TerminalSftpLogQueryRequest;
import com.orion.visor.module.asset.entity.vo.TerminalSftpLogVO;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
@@ -32,7 +32,7 @@ import java.util.List;
* @version 1.0.0
* @since 2023-12-26 22:09
*/
public interface HostSftpService {
public interface TerminalSftpService {
/**
* 分页查询 SFTP 操作日志
@@ -40,7 +40,7 @@ public interface HostSftpService {
* @param request request
* @return rows
*/
DataGrid<HostSftpLogVO> getHostSftpLogPage(HostSftpLogQueryRequest request);
DataGrid<TerminalSftpLogVO> getTerminalSftpLogPage(TerminalSftpLogQueryRequest request);
/**
* 删除 SFTP 操作日志
@@ -48,7 +48,7 @@ public interface HostSftpService {
* @param idList idList
* @return effect
*/
Integer deleteHostSftpLog(List<Long> idList);
Integer deleteTerminalSftpLog(List<Long> idList);
/**
* 设置文件内容

View File

@@ -18,7 +18,6 @@ package com.orion.visor.module.asset.service.impl;
import com.orion.lang.function.Functions;
import com.orion.lang.utils.collect.Lists;
import com.orion.lang.utils.collect.Maps;
import com.orion.lang.utils.collect.Sets;
import com.orion.visor.framework.common.constant.Const;
import com.orion.visor.framework.common.utils.TreeUtils;
import com.orion.visor.framework.common.utils.Valid;
@@ -26,12 +25,14 @@ import com.orion.visor.module.asset.convert.HostGroupConvert;
import com.orion.visor.module.asset.dao.HostDAO;
import com.orion.visor.module.asset.entity.request.asset.AssetAuthorizedDataQueryRequest;
import com.orion.visor.module.asset.entity.vo.*;
import com.orion.visor.module.asset.enums.TerminalConnectTypeEnum;
import com.orion.visor.module.asset.enums.HostExtraItemEnum;
import com.orion.visor.module.asset.enums.HostStatusEnum;
import com.orion.visor.module.asset.enums.HostTypeEnum;
import com.orion.visor.module.asset.handler.host.extra.model.HostLabelExtraModel;
import com.orion.visor.module.asset.service.*;
import com.orion.visor.module.asset.service.AssetAuthorizedDataService;
import com.orion.visor.module.asset.service.HostIdentityService;
import com.orion.visor.module.asset.service.HostKeyService;
import com.orion.visor.module.asset.service.HostService;
import com.orion.visor.module.infra.api.*;
import com.orion.visor.module.infra.entity.dto.data.DataGroupDTO;
import com.orion.visor.module.infra.entity.dto.tag.TagDTO;
@@ -78,9 +79,6 @@ public class AssetAuthorizedDataServiceImpl implements AssetAuthorizedDataServic
@Resource
private HostIdentityService hostIdentityService;
@Resource
private TerminalConnectLogService terminalConnectLogService;
@Resource
private FavoriteApi favoriteApi;
@@ -144,14 +142,11 @@ public class AssetAuthorizedDataServiceImpl implements AssetAuthorizedDataServic
.groupTree(Lists.empty())
.treeNodes(Maps.empty())
.hostList(Lists.empty())
.latestHosts(Sets.empty())
.build();
}
AuthorizedHostWrapperVO wrapper = new AuthorizedHostWrapperVO();
// 查询我的收藏
Future<List<Long>> favoriteResult = favoriteApi.getFavoriteRelIdListAsync(FavoriteTypeEnum.HOST, userId);
// 查询最近连接的主机
Future<List<Long>> latestConnectHostIdList = terminalConnectLogService.getLatestConnectHostIdAsync(TerminalConnectTypeEnum.of(type), userId);
// 查询主机拓展信息
Future<Map<Long, String>> labelExtraResult = dataExtraApi.getExtraItemValuesByCacheAsync(userId,
DataExtraTypeEnum.HOST,
@@ -172,8 +167,6 @@ public class AssetAuthorizedDataServiceImpl implements AssetAuthorizedDataServic
this.getAuthorizedHostExtra(wrapper.getHostList(),
favoriteResult.get(),
labelExtraResult.get());
// 设置最近连接的主机
wrapper.setLatestHosts(new LinkedHashSet<>(latestConnectHostIdList.get()));
return wrapper;
}

View File

@@ -41,15 +41,12 @@ import com.orion.visor.module.asset.handler.host.terminal.model.TerminalConfig;
import com.orion.visor.module.asset.handler.host.terminal.session.ITerminalSession;
import com.orion.visor.module.asset.service.TerminalConnectLogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Future;
import java.util.stream.Collectors;
/**
@@ -175,15 +172,10 @@ public class TerminalConnectLogServiceImpl implements TerminalConnectLogService
}
@Override
public List<Long> getLatestConnectHostId(TerminalConnectLogQueryRequest request) {
return terminalConnectLogDAO.selectLatestConnectHostId(SecurityUtils.getLoginUserId(), request.getType(), request.getLimit());
}
@Override
@Async("asyncExecutor")
public Future<List<Long>> getLatestConnectHostIdAsync(TerminalConnectTypeEnum type, Long userId) {
List<Long> hostIdList = terminalConnectLogDAO.selectLatestConnectHostId(userId, type.name(), Const.N_10);
return CompletableFuture.completedFuture(hostIdList);
public Set<Long> getLatestConnectHostId(TerminalConnectLogQueryRequest request) {
// 查询最近连接的主机
List<Long> hostIdList = terminalConnectLogDAO.selectLatestConnectHostId(SecurityUtils.getLoginUserId(), request.getType(), request.getLimit());
return new LinkedHashSet<>(hostIdList);
}
@Override

View File

@@ -34,19 +34,19 @@ import com.orion.visor.framework.common.constant.ErrorMessage;
import com.orion.visor.framework.common.constant.ExtraFieldConst;
import com.orion.visor.framework.redis.core.utils.RedisStrings;
import com.orion.visor.framework.security.core.utils.SecurityUtils;
import com.orion.visor.module.asset.convert.HostSftpLogConvert;
import com.orion.visor.module.asset.convert.TerminalSftpLogConvert;
import com.orion.visor.module.asset.define.cache.TerminalCacheKeyDefine;
import com.orion.visor.module.asset.define.operator.TerminalOperatorType;
import com.orion.visor.module.asset.entity.dto.TerminalConnectDTO;
import com.orion.visor.module.asset.entity.dto.SftpGetContentCacheDTO;
import com.orion.visor.module.asset.entity.dto.SftpSetContentCacheDTO;
import com.orion.visor.module.asset.entity.request.host.HostSftpLogQueryRequest;
import com.orion.visor.module.asset.entity.vo.HostSftpLogVO;
import com.orion.visor.module.asset.entity.dto.TerminalConnectDTO;
import com.orion.visor.module.asset.entity.request.host.TerminalSftpLogQueryRequest;
import com.orion.visor.module.asset.entity.vo.TerminalSftpLogVO;
import com.orion.visor.module.asset.handler.host.jsch.SessionStores;
import com.orion.visor.module.asset.handler.host.transfer.manager.HostTransferManager;
import com.orion.visor.module.asset.handler.host.transfer.manager.TerminalTransferManager;
import com.orion.visor.module.asset.handler.host.transfer.session.DownloadSession;
import com.orion.visor.module.asset.service.HostSftpService;
import com.orion.visor.module.asset.service.TerminalService;
import com.orion.visor.module.asset.service.TerminalSftpService;
import com.orion.visor.module.infra.api.OperatorLogApi;
import com.orion.visor.module.infra.entity.dto.operator.OperatorLogQueryDTO;
import com.orion.web.servlet.web.Servlets;
@@ -72,26 +72,26 @@ import java.util.Optional;
*/
@Slf4j
@Service
public class HostSftpServiceImpl implements HostSftpService {
public class TerminalSftpServiceImpl implements TerminalSftpService {
@Resource
private OperatorLogApi operatorLogApi;
@Resource
private HostTransferManager hostTransferManager;
@Resource
private TerminalService terminalService;
@Resource
private TerminalTransferManager terminalTransferManager;
@Override
public DataGrid<HostSftpLogVO> getHostSftpLogPage(HostSftpLogQueryRequest request) {
public DataGrid<TerminalSftpLogVO> getTerminalSftpLogPage(TerminalSftpLogQueryRequest request) {
// 查询
OperatorLogQueryDTO query = this.buildQueryInfo(request);
// 转换
return operatorLogApi.getOperatorLogPage(query)
.map(s -> {
JSONObject extra = JSON.parseObject(s.getExtra());
HostSftpLogVO vo = HostSftpLogConvert.MAPPER.to(s);
TerminalSftpLogVO vo = TerminalSftpLogConvert.MAPPER.to(s);
vo.setHostId(extra.getLong(ExtraFieldConst.HOST_ID));
vo.setHostName(extra.getString(ExtraFieldConst.HOST_NAME));
vo.setHostAddress(extra.getString(ExtraFieldConst.ADDRESS));
@@ -105,10 +105,10 @@ public class HostSftpServiceImpl implements HostSftpService {
}
@Override
public Integer deleteHostSftpLog(List<Long> idList) {
log.info("HostSftpLogService.deleteSftpLog start {}", JSON.toJSONString(idList));
public Integer deleteTerminalSftpLog(List<Long> idList) {
log.info("TerminalSftpService.deleteSftpLog start {}", JSON.toJSONString(idList));
Integer effect = operatorLogApi.deleteOperatorLog(idList);
log.info("HostSftpLogService.deleteSftpLog finish {}", effect);
log.info("TerminalSftpService.deleteSftpLog finish {}", effect);
// 设置日志参数
OperatorLogs.add(OperatorLogs.COUNT, effect);
return effect;
@@ -185,7 +185,7 @@ public class HostSftpServiceImpl implements HostSftpService {
public StreamingResponseBody downloadWithTransferToken(String channelId, String transferToken, HttpServletResponse response) {
// 获取会话
DownloadSession session = (DownloadSession) Optional.ofNullable(channelId)
.map(hostTransferManager::getHandler)
.map(terminalTransferManager::getHandler)
.map(s -> s.getSessionByToken(transferToken))
.filter(s -> s instanceof DownloadSession)
.orElse(null);
@@ -206,7 +206,7 @@ public class HostSftpServiceImpl implements HostSftpService {
* @param request request
* @return query
*/
private OperatorLogQueryDTO buildQueryInfo(HostSftpLogQueryRequest request) {
private OperatorLogQueryDTO buildQueryInfo(TerminalSftpLogQueryRequest request) {
Long hostId = request.getHostId();
String type = request.getType();
// 构建参数