新增查看页面

This commit is contained in:
2026-01-10 23:38:38 +08:00
parent 363d889cb2
commit 5dc221199e
10 changed files with 363 additions and 155 deletions

View File

@@ -29,7 +29,7 @@
<dependency> <dependency>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId> <artifactId>hutool-all</artifactId>
<version>5.8.16</version> <version>5.8.42</version>
</dependency> </dependency>
<dependency> <dependency>
@@ -41,7 +41,19 @@
<dependency> <dependency>
<groupId>commons-net</groupId> <groupId>commons-net</groupId>
<artifactId>commons-net</artifactId> <artifactId>commons-net</artifactId>
<version>3.11.0</version> <!-- 请根据需要使用最新版本 --> <version>3.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.4.1</version>
</dependency> </dependency>
<!-- Apache Commons --> <!-- Apache Commons -->

View File

@@ -1,5 +1,6 @@
package com.jeesite.modules.app.Job.biz; package com.jeesite.modules.app.Job.biz;
import com.jcraft.jsch.Session;
import com.jeesite.common.config.Global; import com.jeesite.common.config.Global;
import com.jeesite.modules.app.dao.info.CpuInfo; import com.jeesite.modules.app.dao.info.CpuInfo;
import com.jeesite.modules.app.dao.info.DiskInfo; import com.jeesite.modules.app.dao.info.DiskInfo;
@@ -81,14 +82,17 @@ public class hostJob {
public void syncServerInfo(BizMonitorHost host) { public void syncServerInfo(BizMonitorHost host) {
BizMonitorAccount monitorAccount = new BizMonitorAccount(); BizMonitorAccount monitorAccount = new BizMonitorAccount();
monitorAccount.setHostId(host.getHostId()); monitorAccount.setHostId(host.getHostId());
monitorAccount.setUstatus("1");
monitorAccount.setSshUsername("ogsapp"); monitorAccount.setSshUsername("ogsapp");
List<BizMonitorAccount> accountList = accountService.findList(monitorAccount); List<BizMonitorAccount> accountList = accountService.findList(monitorAccount);
if (accountList.size() > 0) { if (accountList.size() > 0) {
try { try {
BizMonitorAccount account = accountList.get(0); BizMonitorAccount account = accountList.get(0);
CpuInfo cpuInfo = SystemUtil.getCpuMemUsage(host.getIpAddress(), account.getSshPort(), account.getSshUsername(), vo.getDecode(account.getSshPassword())); Session session = SystemUtil.getSshSession(account);
ServerInfo info = SystemUtil.getServerBasicInfo(host.getIpAddress(), account.getSshPort(), account.getSshUsername(), vo.getDecode(account.getSshPassword()), host.getIpAddress()); if (session.isConnected()) {
List<DiskInfo> diskInfos = SystemUtil.getDiskInfos(host.getIpAddress(), account.getSshPort(), account.getSshUsername(), vo.getDecode(account.getSshPassword())); CpuInfo cpuInfo = SystemUtil.getCpuMemUsage(session);
ServerInfo info = SystemUtil.getServerBasicInfo(session);
List<DiskInfo> diskInfos = SystemUtil.getDiskInfos(session);
syncDeviceInfo(host, diskInfos); syncDeviceInfo(host, diskInfos);
BizServerInfo bizServerInfo = new BizServerInfo(); BizServerInfo bizServerInfo = new BizServerInfo();
bizServerInfo.setHostId(host.getHostId()); bizServerInfo.setHostId(host.getHostId());
@@ -114,8 +118,10 @@ public class hostJob {
BizWarningAlert warningAlert = new BizWarningAlert("ZJ_" + KeyUtil.ObjKey(12, 2), "内存预警", 2, serverInfo.getHostname() + "内存预警", "当前主机内存已超过" + MEM_RATE + "%,请及时处理,主机IP" + serverInfo.getIpAddress(), "业务系统", "0"); BizWarningAlert warningAlert = new BizWarningAlert("ZJ_" + KeyUtil.ObjKey(12, 2), "内存预警", 2, serverInfo.getHostname() + "内存预警", "当前主机内存已超过" + MEM_RATE + "%,请及时处理,主机IP" + serverInfo.getIpAddress(), "业务系统", "0");
bizWarningAlertService.save(warningAlert); bizWarningAlertService.save(warningAlert);
} }
SystemUtil.closeSession(session);
}
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage()); logger.error(e.getMessage(), host);
} }
} }
} }
@@ -145,7 +151,7 @@ public class hostJob {
bizWarningAlertService.save(warningAlert); bizWarningAlertService.save(warningAlert);
} }
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage()); logger.error(e.getMessage(), host);
} }
} }
} }

View File

@@ -1,8 +1,16 @@
package com.jeesite.modules.app; package com.jeesite.modules.app;
import com.jeesite.modules.app.utils.SystemUtil;
import com.jcraft.jsch.Session;
public class Test { public class Test {
public static void main(String[] args) { public static void main(String[] args) throws Exception {
// Session session = SystemUtil.getSshSession("192.168.31.182", 22, "ogsapp", "WIjYVp3bSNaJ7gK9n9jk7Q==");
//
// System.out.println(SystemUtil.getServerBasicInfo(session));
} }
} }

View File

@@ -0,0 +1,109 @@
package com.jeesite.modules.app.utils;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.Arrays;
import java.util.concurrent.ThreadLocalRandom;
/**
* AES加密解密工具类CBC/PKCS5Padding
* 优化说明修复密钥BUG+解决换行问题+性能优化+安全加固+零依赖
*/
public class AesUtil {
private static final LoggerUtils logger = LoggerUtils.getInstance();
private static final String AES_KEY_HEX = "AD42F6697B035B7580E4FEF93BE20BAD"; // 你的32位16进制密钥
private static final String CHARSET = StandardCharsets.UTF_8.name();
private static final int IV_LENGTH = 16; // AES CBC IV固定16字节
private static final String TRANSFORMATION = "AES/CBC/PKCS5Padding";
private static final String ALGORITHM = "AES";
private static final ThreadLocal<Cipher> ENCRYPT_CIPHER = ThreadLocal.withInitial(() -> {
try {
return Cipher.getInstance(TRANSFORMATION);
} catch (Exception e) {
throw new RuntimeException(e);
}
});
private static final ThreadLocal<Cipher> DECRYPT_CIPHER = ThreadLocal.withInitial(() -> {
try {
return Cipher.getInstance(TRANSFORMATION);
} catch (Exception e) {
throw new RuntimeException(e);
}
});
/**
* 加密
*/
public static String encrypt(String content) {
return encrypt(content, hex2Bytes(AES_KEY_HEX));
}
/**
* 解密
*/
public static String decrypt(String content) {
return decrypt(content, hex2Bytes(AES_KEY_HEX));
}
public static String encrypt(String content, byte[] key) {
if (content == null || content.isEmpty()) {
return "";
}
try {
SecretKeySpec secretKey = new SecretKeySpec(key, ALGORITHM);
IvParameterSpec iv = new IvParameterSpec(Arrays.copyOf(key, IV_LENGTH));
Cipher cipher = ENCRYPT_CIPHER.get();
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
byte[] encryptBytes = cipher.doFinal(content.getBytes(CHARSET));
return Base64.getEncoder().encodeToString(encryptBytes);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static String decrypt(String content, byte[] key) {
if (content == null || content.isEmpty()) {
return "";
}
try {
SecretKeySpec secretKey = new SecretKeySpec(key, ALGORITHM);
IvParameterSpec iv = new IvParameterSpec(Arrays.copyOf(key, IV_LENGTH));
Cipher cipher = DECRYPT_CIPHER.get();
cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
byte[] decryptBytes = cipher.doFinal(Base64.getDecoder().decode(content));
String result = new String(decryptBytes, CHARSET);
return result.trim();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 32位16进制字符串转16字节数组解决你的密钥长度BUG的核心方法
*/
private static byte[] hex2Bytes(String hexStr) {
if (hexStr == null || hexStr.length() % 2 != 0) {
throw new IllegalArgumentException("密钥必须是偶数长度的16进制字符串");
}
byte[] bytes = new byte[hexStr.length() / 2];
for (int i = 0; i < bytes.length; i++) {
bytes[i] = (byte) Integer.parseInt(hexStr.substring(i * 2, i * 2 + 2), 16);
}
return bytes;
}
/**
* 生成随机16字节IV向量方案2安全随机IV新业务推荐使用
*/
private static byte[] generateRandomIV() {
byte[] iv = new byte[IV_LENGTH];
ThreadLocalRandom.current().nextBytes(iv);
return iv;
}
}

View File

@@ -1,5 +1,7 @@
package com.jeesite.modules.app.utils; package com.jeesite.modules.app.utils;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;

View File

@@ -19,6 +19,10 @@ public class MyUtils {
return sb.toString(); return sb.toString();
} }
public static String getPath(String... paths) {
return String.join("/", paths);
}
public static Map<String, Object> convertToTreeNode(BizFolders folder, String parentName) { public static Map<String, Object> convertToTreeNode(BizFolders folder, String parentName) {
Map<String, Object> node = new HashMap<>(); Map<String, Object> node = new HashMap<>();

View File

@@ -1,12 +1,12 @@
package com.jeesite.modules.app.utils; package com.jeesite.modules.app.utils;
import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session; import com.jcraft.jsch.Session;
import com.jeesite.modules.app.dao.info.CpuInfo; import com.jeesite.modules.app.dao.info.CpuInfo;
import com.jeesite.modules.app.dao.info.DiskInfo; import com.jeesite.modules.app.dao.info.DiskInfo;
import com.jeesite.modules.app.dao.info.ServerInfo; import com.jeesite.modules.app.dao.info.ServerInfo;
import com.jeesite.modules.biz.entity.BizMonitorAccount;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.io.BufferedReader; import java.io.BufferedReader;
@@ -15,165 +15,193 @@ import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
/**
* 服务器系统信息采集工具类SSH方式
* 最终优化版解决Session复用问题调用方统一管理会话生命周期杜绝重复关闭
*/
public class SystemUtil { public class SystemUtil {
// CPU使用率默认值
// SSH 连接超时时间(毫秒) private static final double DEFAULT_USAGE = 0.0;
private static final int SSH_TIMEOUT = 5000; private static final List<String> FILTER_FILE_SYSTEM = Arrays.asList("dev");
/** /**
* 建立SSH连接 * 建立SSH连接
*/ */
private static Session getSshSession(String host, int port, String username, String password) throws Exception { public static Session getSshSession(BizMonitorAccount account) {
Session session = null;
try {
String passwd = AesUtil.decrypt(account.getSshPassword());
JSch jsch = new JSch(); JSch jsch = new JSch();
Session session = jsch.getSession(username, host, port); session = jsch.getSession(account.getSshUsername(), account.getIpAddress(), account.getSshPort());
session.setPassword(password); session.setPassword(passwd);
Properties config = new Properties(); Properties config = new Properties();
config.put("StrictHostKeyChecking", "no"); config.put("StrictHostKeyChecking", "no");
session.setConfig(config); session.setConfig(config);
session.setTimeout(account.getTimeoutSeconds());
session.setTimeout(SSH_TIMEOUT);
session.connect(); session.connect();
} catch (Exception e) {
System.out.println(e);
}
return session; return session;
} }
// ======================== 统一的资源关闭工具方法 ========================
/** /**
* 执行SSH命令并返回结果 * 安全关闭SSH通道空指针安全+异常捕获
*/
private static void closeChannel(ChannelExec channel) {
if (channel != null && channel.isConnected()) {
try {
channel.disconnect();
} catch (Exception e) {
System.out.println(e);
}
}
}
/**
* 安全关闭SSH会话空指针安全+异常捕获
* 【核心】仅提供给调用方,在所有业务查询完成后统一调用!
*/
public static void closeSession(Session session) {
if (session != null && session.isConnected()) {
try {
session.disconnect();
} catch (Exception e) {
System.out.println(e);
}
}
}
/**
* 执行SSH命令并返回结果核心优化资源闭环+异常安全)
*/ */
private static String executeCommand(Session session, String command) throws Exception { private static String executeCommand(Session session, String command) throws Exception {
ChannelExec channel = (ChannelExec) session.openChannel("exec"); if (session == null || !session.isConnected() || !StringUtils.hasText(command)) {
return "";
}
ChannelExec channel = null;
try {
channel = (ChannelExec) session.openChannel("exec");
channel.setCommand(command); channel.setCommand(command);
try (InputStream in = channel.getInputStream();
InputStream in = channel.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8))) {
channel.connect(); channel.connect();
BufferedReader reader = new BufferedReader(
new InputStreamReader(in, StandardCharsets.UTF_8)
);
StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
String line; String line;
while ((line = reader.readLine()) != null) { while ((line = reader.readLine()) != null) {
result.append(line).append("\n"); result.append(line).append("\n");
} }
reader.close();
channel.disconnect();
return result.toString().trim(); return result.toString().trim();
} }
} finally {
// 只关闭通道,不关闭会话
closeChannel(channel);
}
}
/** /**
* 获取服务器基础信息 * 获取服务器基础信息
* ✅ 关键修改移除finally中的closeSession(session),不再关闭会话
*/ */
public static ServerInfo getServerBasicInfo(String host, int port, String username, String password, String ipAddress) throws Exception { public static ServerInfo getServerBasicInfo(Session session) {
ServerInfo info = new ServerInfo(); ServerInfo info = new ServerInfo();
Session session = null;
try { try {
session = getSshSession(host, port, username, password);
// 主机运行时间 // 主机运行时间
String uptimeResult = executeCommand(session, "uptime"); String uptimeResult = executeCommand(session, "uptime");
if (StringUtils.hasText(uptimeResult)) { if (StringUtils.hasText(uptimeResult)) {
String[] parts = uptimeResult.split("up "); String[] parts = uptimeResult.split("up ");
if (parts.length > 1) { if (parts.length > 1) {
info.setUptime(parts[1].split(", ")[0]); String uptime = parts[1].split(",")[0];
info.setUptime(uptime);
} }
} }
// 操作系统 // 操作系统
String osResult = executeCommand(session, "cat /etc/os-release | grep PRETTY_NAME | cut -d'=' -f2 | tr -d '\"'"); String osResult = executeCommand(session, "cat /etc/os-release | grep PRETTY_NAME | cut -d'=' -f2 | tr -d '\"'");
info.setOs(osResult.isEmpty() ? "Unknown" : osResult); info.setOs(StringUtils.hasText(osResult) ? osResult : "Unknown");
// 内核版本 // 内核版本
info.setKernelVersion(executeCommand(session, "uname -r")); info.setKernelVersion(executeCommand(session, "uname -r"));
// 主机名 // 主机名
info.setHostname(executeCommand(session, "hostname")); info.setHostname(executeCommand(session, "hostname"));
// IP地址传入参数 // IP地址传入参数
info.setIpAddress(ipAddress); info.setIpAddress(session.getHost());
// CPU型号 // CPU型号
String cpuResult = executeCommand(session, "cat /proc/cpuinfo | grep 'model name' | head -n 1 | cut -d: -f2 | sed -e 's/^ *//'"); String cpuResult = executeCommand(session, "cat /proc/cpuinfo | grep 'model name' | head -n 1 | cut -d: -f2 | sed -e 's/^ *//'");
info.setCpuModel(cpuResult.isEmpty() ? "Unknown" : cpuResult); info.setCpuModel(StringUtils.hasText(cpuResult) ? cpuResult : "Unknown");
// 内存总量 // 内存总量
String memResult = executeCommand(session, "free -h | grep Mem | awk '{print $2}'"); String memResult = executeCommand(session, "free -h | grep Mem | awk '{print $2}'");
info.setMemoryTotal(memResult.isEmpty() ? "Unknown" : memResult); info.setMemoryTotal(StringUtils.hasText(memResult) ? memResult : "Unknown");
} catch (Exception e) {
} finally { System.out.println(e);
if (session != null && session.isConnected()) {
session.disconnect();
}
} }
return info; return info;
} }
/** /**
* 获取CPU和内存使用率 * 获取CPU和内存使用率
* ✅ 关键修改移除finally中的closeSession(session),不再关闭会话
*/ */
public static CpuInfo getCpuMemUsage(String host, int port, String username, String password) throws Exception { public static CpuInfo getCpuMemUsage(Session session) {
CpuInfo usage = new CpuInfo(); CpuInfo usage = new CpuInfo();
Session session = null;
try { try {
session = getSshSession(host, port, username, password);
// CPU使用率 // CPU使用率
String cpuCommand = "top -bn2 | grep '%Cpu' | tail -n1 | awk '{print 100 - $8}'"; String cpuCommand = "top -bn2 | grep '%Cpu' | tail -n1 | awk '{print 100 - $8}'";
String cpuResult = executeCommand(session, cpuCommand); String cpuResult = executeCommand(session, cpuCommand);
if (StringUtils.hasText(cpuResult)) { if (StringUtils.hasText(cpuResult)) {
usage.setCpuUsage(Double.parseDouble(cpuResult)); usage.setCpuUsage(Double.parseDouble(cpuResult));
} else {
usage.setCpuUsage(DEFAULT_USAGE);
} }
// 内存使用率 // 内存使用率
String memCommand = "free | grep Mem | awk '{print $3/$2 * 100}'"; String memCommand = "free | grep Mem | awk '{print $3/$2 * 100}'";
String memResult = executeCommand(session, memCommand); String memResult = executeCommand(session, memCommand);
if (StringUtils.hasText(memResult)) { if (StringUtils.hasText(memResult)) {
usage.setMemoryUsage(Double.parseDouble(memResult)); usage.setMemoryUsage(Double.parseDouble(memResult));
} else {
usage.setMemoryUsage(DEFAULT_USAGE);
} }
} catch (Exception e) {
} finally { System.out.println(e);
if (session != null && session.isConnected()) {
session.disconnect();
}
} }
return usage; return usage;
} }
/** /**
* 获取所有磁盘信息 * 获取所有磁盘信息
* ✅ 关键修改移除finally中的closeSession(session),不再关闭会话
*/ */
public static List<DiskInfo> getDiskInfos(String host, int port, String username, String password) throws Exception { public static List<DiskInfo> getDiskInfos(Session session) {
List<DiskInfo> diskInfos = new ArrayList<>(); List<DiskInfo> diskInfos = new ArrayList<>();
Session session = null;
try { try {
session = getSshSession(host, port, username, password);
// 关键修改:强制英文输出 + 调整字段索引
String diskCommand = "LANG=en_US.UTF-8 df -h | awk '{print $1, $6, $2, $3, $5}'"; String diskCommand = "LANG=en_US.UTF-8 df -h | awk '{print $1, $6, $2, $3, $5}'";
String diskResult = executeCommand(session, diskCommand); String diskResult = executeCommand(session, diskCommand);
if (StringUtils.hasText(diskResult)) { if (StringUtils.hasText(diskResult)) {
String[] lines = diskResult.split("\n"); String[] lines = diskResult.split("\n");
for (String line : lines) { for (String line : lines) {
// 过滤空行和标题行
if (line.trim().isEmpty() || line.contains("Filesystem")) { if (line.trim().isEmpty() || line.contains("Filesystem")) {
continue; continue;
} }
// 按任意空格分割(兼容多个空格)
String[] parts = line.trim().split("\\s+"); String[] parts = line.trim().split("\\s+");
if (parts.length >= 5) { if (parts.length >= 5) {
String fileSystem = parts[0];
boolean isFilter = FILTER_FILE_SYSTEM.stream().anyMatch(fileSystem::contains);
if (isFilter) {
continue;
}
double usage = DEFAULT_USAGE;
String usageStr = parts[4].replace("%", "").trim(); String usageStr = parts[4].replace("%", "").trim();
DiskInfo diskInfo = new DiskInfo(parts[0], parts[1], parts[2], parts[3], Double.parseDouble(usageStr)); if (StringUtils.hasText(usageStr)) {
usage = Double.parseDouble(usageStr);
}
DiskInfo diskInfo = new DiskInfo(parts[0], parts[1], parts[2], parts[3], usage);
diskInfos.add(diskInfo); diskInfos.add(diskInfo);
} }
} }
} }
} finally { } catch (Exception e) {
if (session != null && session.isConnected()) { System.out.println(e);
session.disconnect();
}
} }
return diskInfos; return diskInfos;
} }

View File

@@ -0,0 +1,81 @@
package com.jeesite.modules.app.utils;
import com.jcraft.jsch.ChannelSftp;
import cn.hutool.core.lang.Filter;
import cn.hutool.extra.ssh.JschUtil;
import cn.hutool.extra.ssh.Sftp;
import com.jeesite.modules.biz.entity.BizMonitorAccount;
import java.io.File;
import java.util.List;
import java.util.regex.Pattern;
public class sftpUtils {
private static final LoggerUtils logger = LoggerUtils.getInstance();
public static Filter<ChannelSftp.LsEntry> ruleFilter(String pattern) {
if (pattern == null || pattern.isBlank()) {
return entry -> false;
}
String matchPattern = pattern.trim().toLowerCase();
String[] ruleArr = matchPattern.split(",");
StringBuilder regexBuilder = new StringBuilder();
for (int i = 0; i < ruleArr.length; i++) {
String rule = ruleArr[i].trim();
if (rule.isBlank()) continue;
// 通配符转正则
String singleRegex = rule.replace(".", "\\.").replace("*", ".*");
regexBuilder.append("^").append(singleRegex).append("$");
if (i < ruleArr.length - 1) {
regexBuilder.append("|"); // 多规则用或连接
}
}
Pattern compilePattern = Pattern.compile(regexBuilder.toString());
return entry -> {
if (entry == null || entry.getAttrs().isDir()) {
return false;
}
String fileName = entry.getFilename();
if (fileName == null || fileName.isBlank()) {
return false;
}
return compilePattern.matcher(fileName.toLowerCase()).matches();
};
}
/**
* 上传文件
*/
public static void fileUpload(BizMonitorAccount account, String getRemotePath, String localFile) {
try {
File file = new File(localFile);
if (file.exists()) {
Sftp sftp = JschUtil.createSftp(account.getIpAddress(), account.getSshPort(), account.getSshUsername(), AesUtil.decrypt(account.getSshPassword()));
sftp.put(localFile, getRemotePath);
sftp.close();
}
} catch (Exception e) {
logger.error(e.getMessage());
}
}
/**
* 下载文件
*/
public static void fileDownload(BizMonitorAccount account, String getRemotePath, String filter, String localPath) {
try {
Sftp sftp = JschUtil.createSftp(account.getIpAddress(), account.getSshPort(), account.getSshUsername(), AesUtil.decrypt(account.getSshPassword()));
List<String> files = sftp.ls(getRemotePath, ruleFilter(filter));
for (String fileName : files) {
sftp.get(MyUtils.getPath(getRemotePath, fileName), localPath);
}
sftp.close();
} catch (Exception e) {
logger.error(e.getMessage());
}
}
}

View File

@@ -1,41 +0,0 @@
package com.jeesite.modules.app.utils;
import com.jeesite.common.codec.AesUtils;
public class vo {
private static final String AES_KEY = "010e06108bb801e85f8738e01c396dd2";
/**
* 获取加密Key
*/
public static String getKey() {
return AesUtils.genKeyString();
}
/**
* 加密
*/
public static String getEncode(String s) {
try {
return AesUtils.encode(s, AES_KEY);
} catch (Exception e) {
System.out.println(e.getMessage());
return s;
}
}
/**
* 解密
*/
public static String getDecode(String s) {
try {
return AesUtils.decode(s, AES_KEY);
} catch (Exception e) {
System.out.println(e.getMessage());
return s;
}
}
}

View File

@@ -1,9 +1,8 @@
package com.jeesite.modules.biz.web; package com.jeesite.modules.biz.web;
import java.util.Date;
import java.util.List; import java.util.List;
import com.jeesite.modules.app.utils.vo; import com.jeesite.modules.app.utils.AesUtil;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
@@ -91,11 +90,11 @@ public class BizMonitorAccountController extends BaseController {
@ResponseBody @ResponseBody
public String save(@Validated BizMonitorAccount bizMonitorAccount) { public String save(@Validated BizMonitorAccount bizMonitorAccount) {
if (bizMonitorAccount.getIsNewRecord()) { if (bizMonitorAccount.getIsNewRecord()) {
bizMonitorAccount.setSshPassword(vo.getEncode(bizMonitorAccount.getSshPassword())); bizMonitorAccount.setSshPassword(AesUtil.encrypt(bizMonitorAccount.getSshPassword()));
} else { } else {
BizMonitorAccount account = bizMonitorAccountService.get(bizMonitorAccount.getAccountId()); BizMonitorAccount account = bizMonitorAccountService.get(bizMonitorAccount.getAccountId());
if (!account.getSshPassword().equals(bizMonitorAccount.getSshPassword())) { if (!account.getSshPassword().equals(bizMonitorAccount.getSshPassword())) {
bizMonitorAccount.setSshPassword(vo.getEncode(bizMonitorAccount.getSshPassword())); bizMonitorAccount.setSshPassword(AesUtil.encrypt(bizMonitorAccount.getSshPassword()));
} }
} }
bizMonitorAccountService.save(bizMonitorAccount); bizMonitorAccountService.save(bizMonitorAccount);