Как предоставить все разрешения для Java-апплета через JNLP без всплывающих окон
Мы запускаем апплет с использованием jnlp. Апплет должен загрузить собственную библиотеку. Jar и jnlp подписаны сгенерированным сертификатом. JNLP предоставляет все разрешения с
<security>
<all-permissions/>
</security>
Файл политики предоставляет все разрешения grant {разрешение java.security.AllPermission; };
Мы получаем всплывающее диалоговое окно "Предупреждение о безопасности Java", которое говорит: это приложение будет выполнять небезопасную операцию. Вы хотите продолжить?
Продолжить или отменить (см. Прикрепленный снимок экрана)
Нет кнопки "разрешить всегда"
Это означает, что диалоговое окно появляется каждый раз, когда апплет запущен. Это раздражает пользователя.
Что можно сделать, чтобы отключить это диалоговое окно, чтобы оно появилось или чтобы оно появлялось не чаще одного раза?
4 ответа
У нас была проблема с аргументами JNLP. Вы не можете указать какой-либо аргумент в параметре jre args JNLP, иначе вы получите предупреждение безопасности.
Чтобы избежать появления всплывающих предупреждений о безопасности, используйте свойства и аргументы JVM из списков, расположенных в строке 638: http://javasourcecode.org/html/open-source/jdk/jdk-6u23/com/sun/deploy/config/Config.java.html
В вашей JNLP, если в аргументах JVM есть что-то, чего там нет в списке, вы получите всплывающее окно, даже если вы правильно подписали сертификат. Все сводится к использованию "защищенных" параметров + надлежащего сертификата, и все будет в порядке.
РЕДАКТИРОВАТЬ
URL был удален, поэтому вот действительные аргументы:
// note: this list MUST correspond to native secure.c file
private static String[] secureVmArgs = {
"-d32", /* use 32-bit data model if available */
"-client", /* to select the "client" VM */
"-server", /* to select the "server" VM */
"-verbose", /* enable verbose output */
"-version", /* print product version and exit */
"-showversion", /* print product version and continue */
"-help", /* print this help message */
"-X", /* print help on non-standard options */
"-ea", /* enable assertions */
"-enableassertions", /* enable assertions */
"-da", /* disable assertions */
"-disableassertions", /* disable assertions */
"-esa", /* enable system assertions */
"-enablesystemassertions", /* enable system assertions */
"-dsa", /* disable system assertione */
"-disablesystemassertions", /* disable system assertione */
"-Xmixed", /* mixed mode execution (default) */
"-Xint", /* interpreted mode execution only */
"-Xnoclassgc", /* disable class garbage collection */
"-Xincgc", /* enable incremental gc. */
"-Xbatch", /* disable background compilation */
"-Xprof", /* output cpu profiling data */
"-Xdebug", /* enable remote debugging */
"-Xfuture", /* enable strictest checks */
"-Xrs", /* reduce use of OS signals */
"-XX:+ForceTimeHighResolution", /* use high resolution timer */
"-XX:-ForceTimeHighResolution", /* use low resolution (default) */
"-XX:+PrintGCDetails", /* Gives some details about the GCs */
"-XX:+PrintGCTimeStamps", /* Prints GCs times happen to the start of the application */
"-XX:+PrintHeapAtGC", /* Prints detailed GC info including heap occupancy */
"-XX:PrintCMSStatistics", /* If > 0, Print statistics about the concurrent collections */
"-XX:+PrintTenuringDistribution", /* Gives the aging distribution of the allocated objects */
"-XX:+TraceClassUnloading", /* Display classes as they are unloaded */
"-XX:SurvivorRatio", /* Sets the ratio of the survivor spaces */
"-XX:MaxTenuringThreshol", /* Determines how much the objects may age */
"-XX:CMSMarkStackSize",
"-XX:CMSMarkStackSizeMax",
"-XX:+CMSClassUnloadingEnabled",/* It needs to be combined with -XX:+CMSPermGenSweepingEnabled */
"-XX:+CMSIncrementalMode", /* Enables the incremental mode */
"-XX:CMSIncrementalDutyCycleMin", /* The percentage which is the lower bound on the duty cycle */
"-XX:+CMSIncrementalPacing", /* Automatic adjustment of the incremental mode duty cycle */
"-XX:CMSInitiatingOccupancyFraction", /* Sets the threshold percentage of the used heap */
"-XX:+UseConcMarkSweepGC", /* Turns on concurrent garbage collection */
"-XX:-ParallelRefProcEnabled",
"-XX:ParallelGCThreads", /* Sets the number of parallel GC threads */
"-XX:ParallelCMSThreads",
"-XX:+DisableExplicitGC", /* Disable calls to System.gc() */
"-XX:+UseCompressedOops", /* Enables compressed references in 64-bit JVMs */
"-XX:+UseG1GC",
"-XX:GCPauseIntervalMillis",
"-XX:MaxGCPauseMillis" /* A hint to the virtual machine to pause times */
};
РЕДАКТИРОВАТЬ
В то время у нас были эти аргументы:
<j2se version="1.6.0+"
initial-heap-size="${heap.init}"
max-heap-size="${heap.max}"
java-vm-args="-Djava.security.policy=${jnlp.ip}${jnlp.port}/ed/security/java.policy"/>
Проблема была с -Djava.security.policy, и я не мог понять всплывающее окно, пока не удалил его оттуда.
Что можно сделать, чтобы отключить это диалоговое окно, чтобы оно появилось или чтобы оно появлялось не чаще одного раза?
Используйте сертификат, который был проверен доверенным органом. Отключение / игнорирование поля "всегда разрешать" для самозаверяющих сертификатов является решением Oracle о том, что они вряд ли изменятся.
У меня были следующие параметры и я получил ту же проблему:
-Xss4m -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5021
Удаление их решило это.
Использование параметров удаленной отладки в JAVA_OPTS может вызвать это всплывающее окно
-agentlib:jdwp=transport=dt_socket,address=localhost:8000,server=y,suspend=n