Маркировка переменных в группах переменных как секретов делает их невидимыми

Это на самом деле ошибка JDK. За несколько лет он сообщался несколько раз, но только в 8139507 он был серьезно воспринят Oracle.

Проблема заключалась в исходном коде JDK для WindowsPreferences.java. В этом классе оба узла userRoot и systemRoot были объявлены как статические, как в:

/**
 * User root node.
 */
static final Preferences userRoot =
     new WindowsPreferences(USER_ROOT_NATIVE_HANDLE, WINDOWS_ROOT_PATH);

/**
 * System root node.
 */
static final Preferences systemRoot =
    new WindowsPreferences(SYSTEM_ROOT_NATIVE_HANDLE, WINDOWS_ROOT_PATH);

Это означает, что при первом обращении к классу статические переменные инициируется и этим будет создан ключ реестра для HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs (= системное дерево), если он еще не существует.

Таким образом, даже если пользователь принял все меры предосторожности в своем собственном коде и никогда не касались или не ссылались на системное дерево, тогда JVM на самом деле все равно попытается создать экземпляр systemRoot, тем самым вызывая предупреждение. Это интересная тонкая ошибка.

В июне 2016 года исправлено право на источник JDK. Будет интересно посмотреть, будет ли он включен в Java 8.

Что вы см. на самом деле предупреждение от внутреннего регистратора JDK. Это не исключение. Я считаю, что предупреждение можно смело игнорировать ... если код пользователя действительно не хочет системных предпочтений, но это очень редко.

Информация о бонусе

Ошибка не отображалась в версиях до Java 1.7.21, потому что до этого установщик JRE создавал для вас ключ реестра HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs, и это эффективно скрыть ошибку. С другой стороны, вам никогда не требовалось запускать установщик, чтобы иметь JRE на вашей машине, или, по крайней мере, это не было намерением Sun / Oracle. Как вам известно, Oracle много лет распространяет JRE для Windows в формате .tar.gz.

0
задан BMW 7 March 2019 в 02:59
поделиться

1 ответ

Таким образом, чтобы сделать это, если сделать переменную секретной, вы не сможете получить к ней доступ напрямую из любого сценария. То, что я делаю, - это то, что мне нужно, чтобы она расшифровывалась, это перейти в раздел переменных окружения задачи и ввести следующее.

enter image description here

Это расшифровывает переменную и устанавливает переменную с тем же именем, чтобы такие инструменты, как Terraform, могли получить к ней доступ.

0
ответ дан Jamie 7 March 2019 в 02:59
поделиться