2

誰もこれに遭遇したことがありますか?アプレットを機能させるのに多くの問題が発生しています。機能していないと思う理由は、サーバーと通信するためにプログラムにあるソケットが原因です。ただし、それを停止する方法がわかりません。Google は役に立ちません。Google Chrome の Java コンソールがエラーを出力せず、エラーが発生したことを示すエラー アプレットをクリックした後にのみポップアップが表示されるため、例外を取得できません。コードが必要な場合は、追加します。事前に感謝します。

security:  --- parseCommandLine converted : -Djava.net.preferIPv4Stack=true
into:
[-Djava.net.preferIPv4Stack=true]
basic: Added progress listener: sun.plugin.util.ProgressMonitorAdapter@acf892
basic: Plugin2ClassLoader.addURL parent called for http://voidchar.com/Other/DatRLTest.jar
basic: Plugin2ClassLoader.addURL parent called for http://voidchar.com/Other/SharedClasses.jar
security: Blacklist revocation check is enabled
security: Trusted libraries list check is enabled
network: Cache entry found [url: http://voidchar.com/Other/DatRLTest.jar, version: null] prevalidated=false/0
cache: Resource http://voidchar.com/Other/DatRLTest.jar has expired.
network: Connecting http://voidchar.com/Other/DatRLTest.jar.pack.gz with proxy=DIRECT
network: Connecting http://voidchar.com:80/ with proxy=DIRECT
basic: exception: illegal URL redirect.
java.lang.SecurityException: illegal URL redirect
at com.sun.deploy.net.HttpUtils.followRedirects(Unknown Source)
at com.sun.deploy.net.BasicHttpRequest.doRequest(Unknown Source)
at com.sun.deploy.net.BasicHttpRequest.doGetRequestEX(Unknown Source)
at com.sun.deploy.cache.ResourceProviderImpl.checkUpdateAvailable(Unknown Source)
at com.sun.deploy.cache.ResourceProviderImpl.isUpdateAvailable(Unknown Source)
at com.sun.deploy.cache.DeployCacheHandler.get(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.plugin.PluginURLJarFileCallBack.downloadJAR(Unknown Source)
at sun.plugin.PluginURLJarFileCallBack.access$000(Unknown Source)
at sun.plugin.PluginURLJarFileCallBack$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.PluginURLJarFileCallBack.retrieve(Unknown Source)
at sun.net.www.protocol.jar.URLJarFile.retrieve(Unknown Source)
at sun.net.www.protocol.jar.URLJarFile.getJarFile(Unknown Source)
at sun.net.www.protocol.jar.JarFileFactory.get(Unknown Source)
at sun.net.www.protocol.jar.JarURLConnection.connect(Unknown Source)
at sun.plugin.net.protocol.jar.CachedJarURLConnection.connect(Unknown Source)
at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFileInternal(Unknown Source)
at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFile(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.getJarFile(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.access$1000(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$JarLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.ensureOpen(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.<init>(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath.getResource(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin2.applet.Plugin2ClassLoader.findClassHelper(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Ignored exception: java.lang.SecurityException: illegal URL redirect
basic: Dialog type is not candidate for embedding
basic: Removed progress listener: sun.plugin.util.ProgressMonitorAdapter@acf892
basic: Loading Java Applet Failed...
security: Accessing keys and certificate in Mozilla user profile: null
security: Reset deny session certificate store

編集:アプレットをロードするために使用しているhtmlコードは次のとおりです。


    {applet width=800 height=800 archive='DatRLTest.jar,SharedClasses.jar'    code='vc.voidwhisperer.datrl.main'}
    {PARAM name="java_arguments" value="-Djava.net.preferIPv4Stack=true"}
    {/applet}

小なり記号と大なり記号は、私が何かを入れようとしているのが気に入らなかったため、置き換えられました。

編集 #2: jar に自己署名しましたが、これはまだ発生しています。私はまだこれを解決する方法を理解する必要があります..

最終編集: これに何時間も取り組んだ後、irc チャンネルの友人のおかげで、最終的に解決策に出会いました。修正された方法の一般的な要点は次のとおりです。

  • 出力の特定の行を見ると: network: Connecting http://voidchar.com/Other/DatRLTest.jar.pack.gz with proxy=DIRECT.
  • そのファイルを探したところ、存在しませんでした。
  • ファイルの種類を調査すると、jar を使用して作成できる pack200 jar であり、それを使用して次の操作を実行できます: cmd を開き、「pack200 example.jar.pack.gz [JarLocation]」と入力します。
  • ここで、example.jar を jar ファイルの名前に置き換えますが、.pack.gz はそのままにしておきます。
  • ここで、そのファイルをアプレットと同じディレクトリにアップロードし、アプレットを再度ロードしてみます。

注: アプレットが署名されていることを確認してください!! これが他の人が私が抱えていた問題を解決するのに役立つことを願っています.

4

4 に答える 4

4

あなたのアプレットは、「Same-Origin」制限に違反しています。これは、厄介なアプレットからユーザーを保護するように設計されたデフォルトのアプレット セキュリティ制限です。

制限の説明と、制限が適用される理由については、このブログ投稿を参照してください。


それについて何ができますか?最善の方法は、リダイレクトが完全に削除されるか、制限に違反していない URL にリダイレクトされるように、アプレットやサービスを再設計することです。それができない場合は、アプレットを「信頼できるアプレット」にする必要があります。たとえば、このチュートリアルを参照して問題を理解してください。


アップデート

アプレットを信頼できるアプレットにするのは間違っています。役に立ちません。OpenJDK のソース コード ( hereおよびhere ) を確認したところ、セキュリティ ポリシーに関係なく、"same-origin" セキュリティ チェックが実行されているようです。(そのメッセージで例外をスローするコードを探します...)

したがって、唯一のオプションは、リンク先の Web ページと同じホストとポートからアプレットを提供することです。つまり、「同一オリジン」ルールに違反しないでください。

于 2012-09-29T01:07:47.850 に答える
2

私の調査によると、この問題は、Java がアプレットを要求し、HTTP 300 応答を受け取るたびに発生します。最初に、java はアプレットの圧縮バージョン、つまり「yourjarfile.jar.pack.gz」をロードしようとします。サーバーが HTTP 404 を配信する場合、すべてが期待どおりに機能します。しかし、サーバーが HTTP 300 応答を配信した場合、Java はリダイレクト ターゲットがあると想定し、何も設定されていない場合は失敗します。

私の経験から、サーバー側で問題を解決するには、次のことを行うことができます。

  1. アプレットが単一の jar ファイルで構成されていて、その後データが読み込まれない場合は、アプレットを pack200 ツールで圧縮し、元の jar ファイルを新しいファイルに置き換えることができます。.pack.gz ファイル拡張子が元のファイルに添付されていることを確認します。
  2. Apache があり、サーバーを完全に制御できる場合は、mod_speling をアンインストールできます。実行している残りの環境でこれが問題ないことを確認してください。
  3. .htaccess ファイルを使用できる場合は、アプレットのロード元のフォルダーのスペル チェックを無効にすることができます。この目的のために、「CheckSpelling off」という内容の .htaccess ファイルを作成します。.htaccess ファイルが既に存在する場合は、この行を追加するだけです。

これが何人かの人々を助けることを願っています。

于 2012-12-10T02:20:59.727 に答える
0

Java 1.7.0_09を使用しているときに、顧客のサーバーで同じ問題が発生しました。以前のバージョンのJavaを使用した場合、問題はありませんでした。同じアプレットを別のサーバーで実行した場合、問題はありません。

私はついに修正を見つけました。Javaキャッシュをクリアしました。(これはブラウザのキャッシュとは異なります。)

Windows 7では、次のことができます。

  1. Javaコントロールパネルを起動し、
  2. 全般]タブをクリックします、
  3. 「インターネット一時ファイル」の下にある「設定」をクリックします。
  4. 「ファイルの削除」をクリックし、
  5. 「キャッシュされたアプリケーションとアプレット」のみを選択し、「OK」をクリックします。

Javaキャッシュをクリアするのにほぼ1分かかりました。

その後、すべてが正常に機能しました。

于 2012-11-12T22:36:44.880 に答える
0

Java アプレット環境のサンドボックス ポリシーに違反している可能性があります。何をするにも必要な資格情報がなく、ユーザーに大丈夫かどうか尋ねなかったので、環境があなたを殺しました。

http://docs.oracle.com/javase/tutorial/security/tour1/step1.html

于 2012-09-29T00:17:37.773 に答える