升级到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(只是为了测试它是否对您有用)?

  • 相关规范:
  • http://docs.oracle.com/javase/7/docs/api/java/lang/SecurityManager.html
  • http://download.java.net/jdk8/docs/technotes/guides/security/permissions.html
  • http://download.java.net/jdk8/docs/technotes/guides/security/spec/security-spec.doc.html

  • 这可能与您非常相关:
  • http://www.javaworld.com/javatips/jw-javatip20.html

  • 编辑:回复: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

    10-04 14:36