diff --git a/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/service/impl/SystemSettingServiceImpl.java b/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/service/impl/SystemSettingServiceImpl.java index 19ebed6b..0ac50bcd 100644 --- a/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/service/impl/SystemSettingServiceImpl.java +++ b/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/com/orion/visor/module/infra/service/impl/SystemSettingServiceImpl.java @@ -1,8 +1,10 @@ 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.Strings; +import com.orion.lang.utils.io.Streams; import com.orion.visor.framework.common.constant.AppConst; import com.orion.visor.framework.common.constant.Const; 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 org.springframework.stereotype.Service; +import java.io.ByteArrayOutputStream; + /** * 系统服务 实现类 * @@ -39,22 +43,33 @@ public class SystemSettingServiceImpl implements SystemSettingService { if (this.uuid != null) { return this.uuid; } - String[] cmd = new String[]{"cat /sys/class/dmi/id/product_serial", "dmidecode -s system-uuid", "wmic csproduct get uuid"}; - for (String s : cmd) { + String[][] cmd = new String[][]{ + 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 { - // 执行命令获取 uuid - String uuid = Processes.getOutputResultString(s); + String uuid = this.getCommandOutput(s); if (Strings.isBlank(uuid)) { 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)); 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); } catch (Exception e) { // IGNORED @@ -63,4 +78,25 @@ public class SystemSettingServiceImpl implements SystemSettingService { 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); + } + } + }