重写复现方法

This commit is contained in:
2025-09-05 17:04:10 +08:00
parent 09cd62efd7
commit bc0ac4e552
5 changed files with 107 additions and 57 deletions

View File

@@ -0,0 +1,15 @@
package com.mini.capi.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class TokenBean {
@Value("${security.default-token}")
private String defaultToken;
public boolean isValidToken(String token) {
return !defaultToken.equals(token);
}
}

View File

@@ -1,24 +1,22 @@
package com.mini.capi.sys.Api; package com.mini.capi.sys.Api;
import com.mini.capi.config.TokenBean;
import com.mini.capi.model.ApiResult; import com.mini.capi.model.ApiResult;
import com.mini.capi.model.TabResult;
import com.mini.capi.sys.domain.TableInfo;
import com.mini.capi.sys.service.DataService;
import com.mini.capi.sys.service.DbService; import com.mini.capi.sys.service.DbService;
import com.mini.capi.sys.service.DockerService; import com.mini.capi.sys.service.DockerService;
import com.mini.capi.sys.service.HostService; import com.mini.capi.sys.service.HostService;
import com.mini.capi.utils.vToken;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController @RestController
@RequestMapping("/Sys/api") @RequestMapping("/Sys/api")
public class apiController { public class apiController {
@Resource
private TokenBean tokenBean;
@Resource @Resource
private DbService dbService; private DbService dbService;
@@ -26,53 +24,16 @@ public class apiController {
@Resource @Resource
private HostService hostService; private HostService hostService;
@Resource
private DataService dataService;
@Resource @Resource
private DockerService dockerService; private DockerService dockerService;
/**
* 获取表的结构和字段
*/
@GetMapping("/getTableDetail")
public ApiResult<TableInfo> getTableDetail(String token, String taskId) {
if (vToken.isValidToken(token)) {
return ApiResult.error(401, "无效的访问令牌");
}
return dataService.getTableDetail(taskId);
}
/**
* 获取MySQL的当前连接下的所有数据表
*/
@GetMapping("/getSourceTables")
public ApiResult<List<TabResult>> listSourceTables(String token, String dbId) {
// 1. 验证token有效性
if (vToken.isValidToken(token)) {
return ApiResult.error(401, "无效的访问令牌");
}
return dbService.listSourceTables(dbId);
}
@GetMapping("/getInfo")
public ApiResult<List<HostService.SnapshotDTO>> getApiInfo(String token) {
if (vToken.isValidToken(token)) {
return ApiResult.error(401, "无效的访问令牌");
}
return hostService.getApiInfo();
}
/** /**
* 获取容器列表 * 获取容器列表
*/ */
@GetMapping("/getDockerInfo") @GetMapping("/DockerInfo")
public ApiResult<?> getDockerInfo(String token) { public ApiResult<?> getDockerInfo(String token) {
if (vToken.isValidToken(token)) { if (tokenBean.isValidToken(token)) {
return ApiResult.error(401, "无效的访问令牌"); return ApiResult.error(401, "无效的访问令牌");
} }
return hostService.getDockerInfo(); return hostService.getDockerInfo();
@@ -82,9 +43,9 @@ public class apiController {
/** /**
* 启动容器 * 启动容器
*/ */
@GetMapping("/getStartDockerInfo") @GetMapping("/StartDockerInfo")
public ApiResult<?> startDockerInfo(String id, String token) { public ApiResult<?> startDockerInfo(String id, String token) {
if (vToken.isValidToken(token)) { if (tokenBean.isValidToken(token)) {
return ApiResult.error(401, "无效的访问令牌"); return ApiResult.error(401, "无效的访问令牌");
} }
return hostService.startDockerInfo(id); return hostService.startDockerInfo(id);
@@ -94,9 +55,9 @@ public class apiController {
/** /**
* 停止容器 * 停止容器
*/ */
@GetMapping("/getStopDockerInfo") @GetMapping("/StopDockerInfo")
public ApiResult<?> stopDockerInfo(String id, String token) { public ApiResult<?> stopDockerInfo(String id, String token) {
if (vToken.isValidToken(token)) { if (tokenBean.isValidToken(token)) {
return ApiResult.error(401, "无效的访问令牌"); return ApiResult.error(401, "无效的访问令牌");
} }
return hostService.stopDockerInfo(id); return hostService.stopDockerInfo(id);
@@ -106,9 +67,9 @@ public class apiController {
/** /**
* 获取容器主机的磁盘使用情况 * 获取容器主机的磁盘使用情况
*/ */
@GetMapping("/getTaskDockerDiskInfo") @GetMapping("/TaskDockerDiskInfo")
public ApiResult<?> getTaskDockerDiskInfo(String token) { public ApiResult<?> getTaskDockerDiskInfo(String token) {
if (vToken.isValidToken(token)) { if (tokenBean.isValidToken(token)) {
return ApiResult.error(401, "无效的访问令牌"); return ApiResult.error(401, "无效的访问令牌");
} }
return dockerService.jobHostDisk(); return dockerService.jobHostDisk();
@@ -118,9 +79,9 @@ public class apiController {
/** /**
* 运行全部任务数据同步 * 运行全部任务数据同步
*/ */
@GetMapping("/getTaskSyncDbInfo") @GetMapping("/TaskSyncDbInfo")
public ApiResult<?> getTaskSyncDbInfo(String token) { public ApiResult<?> getTaskSyncDbInfo(String token) {
if (vToken.isValidToken(token)) { if (tokenBean.isValidToken(token)) {
return ApiResult.error(401, "无效的访问令牌"); return ApiResult.error(401, "无效的访问令牌");
} }
return dbService.jobSyncAllTask(); return dbService.jobSyncAllTask();
@@ -129,9 +90,9 @@ public class apiController {
/** /**
* 运行单个任务 * 运行单个任务
*/ */
@GetMapping("/getTaskSyncDbByInfo") @GetMapping("/TaskSyncDbByInfo")
public ApiResult<?> getTaskSyncDbByInfo(String token, String taskId) { public ApiResult<?> getTaskSyncDbByInfo(String token, String taskId) {
if (vToken.isValidToken(token)) { if (tokenBean.isValidToken(token)) {
return ApiResult.error(401, "无效的访问令牌"); return ApiResult.error(401, "无效的访问令牌");
} }
return dbService.jobSyncOneTask(taskId); return dbService.jobSyncOneTask(taskId);

View File

@@ -0,0 +1,66 @@
package com.mini.capi.sys.Api;
import com.mini.capi.config.TokenBean;
import com.mini.capi.model.ApiResult;
import com.mini.capi.model.TabResult;
import com.mini.capi.sys.domain.TableInfo;
import com.mini.capi.sys.service.DataService;
import com.mini.capi.sys.service.DbService;
import com.mini.capi.sys.service.HostService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/Sys/apiList")
public class listController {
@Resource
private TokenBean tokenBean;
@Resource
private HostService hostService;
@Resource
private DbService dbService;
@Resource
private DataService dataService;
/**
* 获取表的结构和字段
*/
@GetMapping("/getTableDetail")
public ApiResult<TableInfo> getTableDetail(String token, String taskId) {
if (tokenBean.isValidToken(token)) {
return ApiResult.error(401, "无效的访问令牌");
}
return dataService.getTableDetail(taskId);
}
/**
* 获取MySQL的当前连接下的所有数据表
*/
@GetMapping("/getSourceTables")
public ApiResult<List<TabResult>> listSourceTables(String token, String dbId) {
// 1. 验证token有效性
if (tokenBean.isValidToken(token)) {
return ApiResult.error(401, "无效的访问令牌");
}
return dbService.listSourceTables(dbId);
}
@GetMapping("/getCpuInfo")
public ApiResult<List<HostService.SnapshotDTO>> getApiInfo(String token) {
if (tokenBean.isValidToken(token)) {
return ApiResult.error(401, "无效的访问令牌");
}
return hostService.getApiInfo();
}
}

View File

@@ -1,13 +1,18 @@
package com.mini.capi.utils; package com.mini.capi.utils;
import com.mini.capi.config.TokenBean;
import jakarta.annotation.Resource;
public class vToken { public class vToken {
private static final String DEFAULT_TOKEN = "3774e79ac55aff6d1afc0f94bfaf131d"; @Resource
private TokenBean tokenConfig;
public static boolean isValidToken(String token) {
return !DEFAULT_TOKEN.equals(token); public boolean isValidToken(String token) {
return tokenConfig.isValidToken(token);
} }

View File

@@ -20,3 +20,6 @@ logging.level.root=INFO
logging.level.com.example.webssh=DEBUG logging.level.com.example.webssh=DEBUG
logging.file.name=logs/webssh.log logging.file.name=logs/webssh.log
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
security.default-token=3774e79ac55aff6d1afc0f94bfaf131d