25

添付された JNLP からアプリケーションを実行します。Java コンソールで、D を使用してシステム プロパティを出力しました。JNLP ファイルのプロパティは設定されていません。これは、この種の問題が発生した最初の Java バージョンです。7 Update 40まではすべて正常に機能していました.

すべての jar に署名しましたが、マニフェストにセキュリティ属性がありません。

<?xml version="1.0" encoding="UTF-8"?>

<jnlp spec="1.0+" codebase="http://10.0.10.230/webstart/app" href="desktop.jnlp">
<information>
<title>MyApp Desktop</title>
<vendor>MyApp GmbH</vendor>
<homepage href="http://www.myres-edv.de"/>
<description>MyApp Desktop</description>
<offline-allowed/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.5+" initial-heap-size="512M" max-heap-size="1024M" javaws-vm-args="-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8200"/> 
 <property name="org.omg.CORBA.ORBInitialHost" value="10.0.10.230"/>             
 <property name="org.omg.CORBA.ORBServerHost" value="10.0.10.230" />
 <property name="sun.net.spi.nameservice.provider.1" value="dns,sun" />
 <property name="MyApp.baktswritedos" value="true"/>
 <property name="MyApp.nocomm" value="true"/>
 <property name="MyApp.la.erfassungdos" value="true"/>
 <property name="com.sun.corba.ee.transport.ORBTCPConnectTimeouts" value="500:30000:40:30000" />
 <property name="deployment.trace.level" value="all" /> 
 <jar href="myresjar/ejb/myres/myres_ejb_client.jar" main="true" download="eager"/>
 <jar href="myresjar/ejb/myres/myres_ejb.jar" download="eager"/>
 <extension name="jars" href="commonejbjars.jnlp"/>
 <extension name="jars" href="jr.jnlp"/>
 <extension name="jars" href="commonjars.jnlp"/>
 <extension name="jars" href="commonjh.jnlp"/>
 <nativelib href="myresjar/ejb/myres/myres_dll.jar"/>
</resources>
<resources os="Windows">
    <nativelib href="myresjar/myres/native-dlls.jar" download="eager"/>
</resources>
<application-desc main-class="de.myapp.gui.desktop.mainframe.DesktopMainFrame">
   <argument>-serverIP=10.0.0.230</argument> 
   <argument>-initNewDayAction=true</argument> 
</application-desc>
</jnlp>    
4

5 に答える 5

32

Java 7 Update 45 (1.7.0_45) でも同じ問題が発生しました。JNLP Specは、回避策のヒントを提供しました。

jnlp ファイルに設定されたプロパティは、通常、VM の起動後、アプリケーションが呼び出される前に、Java Web Start によって設定されます。一部のプロパティは「安全な」プロパティと見なされ、Java 呼び出しコマンド ラインで -Dkey=value 引数として渡すことができます。

次のプロパティ、および「javaws.」で始まるプロパティ。または「jnlp.」は「安全」と見なされ、次の方法で VM に渡されます: ...

「安全でない」プロパティは機能しなくなりましたが、「安全な」プロパティは引き続き正しく設定されることに気付きました。VM が起動された後、アプリケーションが呼び出される前にプロパティを設定するメカニズムが、この Java の更新で壊れた可能性があります。または、これは意図的であるが文書化されていない変更であった可能性があります。

回避策は、システム プロパティのタイプによって異なります。

Java の動作やライブラリに影響するシステム プロパティについては、JNLP で設定する代わりに、アプリケーションの開始時にSystem.setProperty()を呼び出すようにコードを変更しました。

JNLP ファイルからアプリケーションを構成するために使用するプロパティについては、jnlp. プレフィックスを付けて、それらが再び正しく渡されるようにします。

<property name="myconfig" value="DE" />

<property name="jnlp.myconfig" value="DE" />

編集: OpenJDK Bug JDK-8023821によると、変更は意図的なものでした:

安全でないシステム プロパティを設定するには、7u45 起動記述子 (JNLP ファイル) に署名する必要があります。したがって、7u45で予想される動作です...(コメントから)

JNLP に署名する手順

于 2013-10-16T14:05:41.440 に答える
4

この同じ問題で少しひどくなりました。最終的には、署名済みの jar に JNLP ファイルを含めるというルートに行きましたが、以前に 1 つのセットの JARS をビルドし、複数の JNLP ファイルを使用してさまざまな環境 (QA、プロダクション、デモなど)、システム プロパティを介して環境の詳細をアプリに渡します。http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/security/signedJNLP.htmlで説明されているように、JNLPテンプレートファイルを利用しようとしました。、しかし、JNLPファイルの検証に関連するエラーが発生し続け、時間の制約のために断念しました. 何か間違ったことをしていた可能性がありますが、エラー メッセージからは、JNLP ファイルのどの部分がテンプレートと一致しなかったかがまったくわかりませんでした。さらに、上記のリンクには、「セキュリティを侵害する可能性のある要素または属性は、この機能からロックアウトされます」というやや役に立たないメモがあります。そのような要素や属性の文書化された例は見つかりませんでした。

于 2013-10-21T15:51:08.613 に答える
2

同じ問題があり、jnlp ファイルに署名することで解決しました。メインの jar には、APPLICATION.JNLP という名前に変更され、JNLP-INF フォルダーの下に配置された jnlp ファイルのコピーが含まれている必要があります (フォルダーと jnlp ファイルの名前は大文字にする必要があります)。

于 2013-10-16T11:03:59.330 に答える
2

私は次のように設定しました:

<jnlp>
...
    <application-desc main-class="Main">
        <argument>param1=value1</argument>
    </application-desc>
</jnlp>

Ps。タグを使用して値を渡すことは、JVM パラメーターではなく、アプリケーション パラメーターを渡すことに注意してください。アプリケーションは、メソッド main(String args[]) でこのパラメーターをキャッチする必要があります。

于 2013-10-17T14:10:25.403 に答える
0

この問題を解決するために 2 日間を費やし、jar やその他のファイルに署名しようとしました...そして、非常にシンプルで正常に動作する解決策を見つけました。

*次の内容の jndi.properties-file を JRE-home-director*y (jre7/lib) に配置します。

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=jnp://localhost:1099

Java 1.6 から Java 1.7(51) に更新するときにこの問題が発生しました...

于 2014-03-18T08:59:56.377 に答える