🐛 修复机器码获取失败.
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
package com.orion.visor.module.infra.service.impl;
|
package com.orion.visor.module.infra.service.impl;
|
||||||
|
|
||||||
import com.orion.ext.process.Processes;
|
import com.orion.ext.process.ProcessAwaitExecutor;
|
||||||
|
import com.orion.lang.support.Attempt;
|
||||||
import com.orion.lang.utils.Arrays1;
|
import com.orion.lang.utils.Arrays1;
|
||||||
import com.orion.lang.utils.Strings;
|
import com.orion.lang.utils.Strings;
|
||||||
|
import com.orion.lang.utils.io.Streams;
|
||||||
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.Mixes;
|
import com.orion.visor.framework.common.utils.Mixes;
|
||||||
@@ -10,6 +12,8 @@ import com.orion.visor.module.infra.entity.vo.AppInfoVO;
|
|||||||
import com.orion.visor.module.infra.service.SystemSettingService;
|
import com.orion.visor.module.infra.service.SystemSettingService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统服务 实现类
|
* 系统服务 实现类
|
||||||
*
|
*
|
||||||
@@ -39,22 +43,33 @@ public class SystemSettingServiceImpl implements SystemSettingService {
|
|||||||
if (this.uuid != null) {
|
if (this.uuid != null) {
|
||||||
return this.uuid;
|
return this.uuid;
|
||||||
}
|
}
|
||||||
String[] cmd = new String[]{"cat /sys/class/dmi/id/product_serial", "dmidecode -s system-uuid", "wmic csproduct get uuid"};
|
String[][] cmd = new String[][]{
|
||||||
for (String s : cmd) {
|
new String[]{"/bin/sh", "-c", "cat /sys/class/dmi/id/product_serial"},
|
||||||
|
new String[]{"/bin/bash", "-c", "cat /sys/class/dmi/id/product_serial"},
|
||||||
|
new String[]{"/bin/sh", "-c", "dmidecode -s system-uuid"},
|
||||||
|
new String[]{"/bin/bash", "-c", "dmidecode -s system-uuid"},
|
||||||
|
new String[]{"cmd", "/c", "wmic csproduct get uuid"}
|
||||||
|
};
|
||||||
|
for (String[] s : cmd) {
|
||||||
try {
|
try {
|
||||||
// 执行命令获取 uuid
|
String uuid = this.getCommandOutput(s);
|
||||||
String uuid = Processes.getOutputResultString(s);
|
|
||||||
if (Strings.isBlank(uuid)) {
|
if (Strings.isBlank(uuid)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// 去除符号并且转为大写
|
// 去除符号并且转为大写
|
||||||
uuid = uuid.replaceAll(Const.DASHED, Const.EMPTY).toUpperCase();
|
uuid = uuid.replaceAll(Const.DASHED, Const.EMPTY)
|
||||||
// 去除特殊字符
|
.toUpperCase()
|
||||||
|
.trim();
|
||||||
|
// 去除 \n
|
||||||
String extraUuid = Arrays1.last(uuid.trim().split(Const.LF));
|
String extraUuid = Arrays1.last(uuid.trim().split(Const.LF));
|
||||||
if (!Strings.isBlank(extraUuid)) {
|
if (!Strings.isBlank(extraUuid)) {
|
||||||
uuid = extraUuid;
|
uuid = extraUuid.trim();
|
||||||
|
}
|
||||||
|
// 去除 :
|
||||||
|
extraUuid = Arrays1.last(uuid.trim().split(Const.COLON));
|
||||||
|
if (!Strings.isBlank(extraUuid)) {
|
||||||
|
uuid = extraUuid.trim();
|
||||||
}
|
}
|
||||||
// 转义
|
|
||||||
return this.uuid = Mixes.obfuscate(uuid);
|
return this.uuid = Mixes.obfuscate(uuid);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// IGNORED
|
// IGNORED
|
||||||
@@ -63,4 +78,25 @@ public class SystemSettingServiceImpl implements SystemSettingService {
|
|||||||
return this.uuid = Const.UNKNOWN;
|
return this.uuid = Const.UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取输出结果
|
||||||
|
*
|
||||||
|
* @param command command
|
||||||
|
* @return result
|
||||||
|
*/
|
||||||
|
private String getCommandOutput(String[] command) {
|
||||||
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
|
ProcessAwaitExecutor executor = new ProcessAwaitExecutor(command);
|
||||||
|
try {
|
||||||
|
executor.streamHandler(i -> Attempt.uncheck(Streams::transfer, i, out))
|
||||||
|
.waitFor()
|
||||||
|
.sync()
|
||||||
|
.exec();
|
||||||
|
return out.toString();
|
||||||
|
} finally {
|
||||||
|
Streams.close(out);
|
||||||
|
Streams.close(executor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user