升级到Java 7(Oracle/Sun JDK,不是OpenJDK)后,如果我尝试使用javaws
在Web Start下测试我的应用程序,它会告诉我“应用程序被安全设置阻止”。我可以使用Java控制面板将安全性从高级别降低到中级,以使其正常运行(它询问我是否要启动未签名的应用程序),但这也降低了我的Web浏览器的安全级别。是否有任何系统属性可以让我执行javaws -J-Dkey=value
,以使一个javaws实例放宽或忽略有关启动内容的安全性(但其他方面保持安全性不变)?
编辑:如果有人可以指出javaws
的Java 7源代码在哪里,我将很高兴阅读该代码以找到答案。
编辑2 :当我通过Java控制面板将Java安全性设置为中级时,使用javaws
启动我的应用程序会导致它询问我是否要运行未签名的应用程序。这是我要复制的。通过将系统属性deployment.security.level=MEDIUM
添加到文件~/.java/deployment/deployment.properties
中,控制面板将安全性设置为中。我尝试了两种使用此方法的方法:
1)将-J-Ddeployment.security.level=MEDIUM
传递给javaws
。这导致我的应用程序完全启动,而没有询问我是否要运行未签名的应用程序。
2)传递-J-Ddeployment.system.config=~/.java/deployment/FOO.properties
,其中FOO.properties
是普通deployment.properties
文件的副本,并手动添加了deployment.security.level=MEDIUM
。再次,这导致我的应用程序完全启动,而没有询问我是否要运行未签名的应用程序。
编辑3 :请注意,我使用的是Oracle/Sun JDK,而不是OpenJDK。
最佳答案
SecurityManager
? java.security.AllPermission
(只是为了测试它是否对您有用)? 相关规范:
这可能与您非常相关:
编辑:回复:javaws,检查javaws本身的调用。我做了
cat /usr/bin/javaws
,然后我们开始:#!/bin/bash
JAVA=/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java
LAUNCHER_BOOTCLASSPATH="-Xbootclasspath/a:/usr/share/icedtea-web/netx.jar"
LAUNCHER_FLAGS=-Xms8m
CLASSNAME=net.sourceforge.jnlp.runtime.Boot
BINARY_LOCATION=/usr/bin/javaws
PROGRAM_NAME=javaws
CP=/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/rt.jar
JAVA_ARGS=( )
ARGS=( )
COMMAND=()
i=0
j=0
while [ "$#" -gt "0" ]; do
case "$1" in
-J*)
JAVA_ARGS[$i]="${1##-J}"
i=$((i+1))
;;
*)
ARGS[$j]="$1"
j=$((j+1))
;;
esac
shift
done
k=0
COMMAND[k]="${JAVA}"
k=$((k+1))
COMMAND[k]="${LAUNCHER_BOOTCLASSPATH}"
k=$((k+1))
COMMAND[k]="${LAUNCHER_FLAGS}"
k=$((k+1))
i=0
while [ "$i" -lt "${#JAVA_ARGS[@]}" ]; do
COMMAND[k]="${JAVA_ARGS[$i]}"
i=$((i+1))
k=$((k+1))
done
COMMAND[k]="-classpath"
k=$((k+1))
COMMAND[k]="${CP}"
k=$((k+1))
COMMAND[k]="-Dicedtea-web.bin.name=${PROGRAM_NAME}"
k=$((k+1))
COMMAND[k]="-Dicedtea-web.bin.location=${BINARY_LOCATION}"
k=$((k+1))
COMMAND[k]="-Djava.security.manager"
k=$((k+1))
COMMAND[k]="-Djava.security.policy=/etc/icedtea-web/javaws.policy"
k=$((k+1))
COMMAND[k]="${CLASSNAME}"
k=$((k+1))
j=0
while [ "$j" -lt "${#ARGS[@]}" ]; do
COMMAND[k]="${ARGS[$j]}"
j=$((j+1))
k=$((k+1))
done
"${COMMAND[@]}"
exit $?
最重要的是已加载了
javaws.policy
。