Java: Security Exception " illegal url redirect
Hat jemand erlebt? Es verursacht mir eine Menge ärger bekommen eine appplet arbeiten. Der Grund, warum ich denke, dass es nicht funktioniert, wird durch die Buchse, die ist in meinem Programm mit einem server kommunizieren. Aber ich kann nicht herausfinden, wie es zu stoppen, und google ist nicht zu helfen. Ich kann nicht eine Ausnahme, weil die java-Konsole für google chrome ist nicht ausgeben der Fehler, nur was mich ein popup nach einem Klick auf den errored-applet sagen, dass es fehlerhaft ist. Wenn code benötigt wird, will ich hinzufügen. Vielen Dank im Voraus.
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
Edit: Hier der html code, den ich verwende zum laden des applet.
{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}
Weniger als & größer-als-Zeichen ersetzt wurden, aufgrund der Tatsache, dass es mich nicht versuchen, etwas mit Ihnen.
Edit #2: ich habe selbst signiertes jar, ist dies immer noch geschieht. Ich hab noch herauszufinden, wie man dieses Problem lösen..
Final edit: Nach vielen Stunden der Arbeit an diesem habe ich schließlich auf eine Lösung, Dank einem Freund in einem irc-channel. Hier ist der Allgemeine Kern, wie es behoben wurde:
- Wenn man sich eine bestimmte Zeile der Ausgabe: Netzwerk: Anschluss http://voidchar.com/Other/DatRLTest.jar.pack.gz mit proxy=DIRECT.
- Auf der Suche für diese Datei, die es gar nicht gibt.
- Tun, einige der Forschung in die Datei geben, es ist ein pack200 jar-Datei, die gemacht werden können mit einem Glas und dann das folgende mit Ihr: die öffnung der cmd und der Eingabe von 'pack200 example.jar.pack.gz [JarLocation]'.
- Jetzt ersetzen example.jar mit dem Namen der jar-Datei, aber lassen Sie die .pack.gz es.
- Laden Sie nun diese Datei in das gleiche Verzeichnis wie das applet und versuchen, laden Sie das applet erneut.
HINWEIS: Stellen Sie sicher, dass das applet signiert ist!! Hoffe, dies hilft anderen lösen das problem hatte ich auch.
InformationsquelleAutor |
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein applet ist die Verletzung der "Same-Origin" - Beschränkung, die ist ein Standard-Applet-Sicherheit-Beschränkung, die ist so konzipiert, um schützen den Anwender vor bösen applets.
Sehen in diesem blog-post für eine Erläuterung der Einschränkung, und warum es erzwungen ist.
Was kann man dagegen tun? Am besten wäre es, Sie zu Sanieren, Sie Applets und /oder Dienstleistungen, so dass die Umleitung wurde entweder komplett entfernt, oder es umgeleitet auf eine URL, die nicht gegen die Beschränkung. Wenn das nicht eine option, werden Sie brauchen, um Ihr applet ein "trusted Applets"; z.B. siehe dieses tutorial um die Probleme zu verstehen.
UPDATE
Ich bin falsch über das applet einen vertrauenswürdigen applet. Es wird nicht helfen. Ich schaute auf die OpenJDK-Quellcode (hier, und hier), und es scheint, dass die "same-origin" Sicherheits-check durchgeführt wird, unabhängig von der Sicherheitspolitik. (Suchen Sie nach den code, der die Ausnahme ausgelöst mit dieser Nachricht ...)
Also die einzige option ist, um zu dienen die Applets vom gleichen host und port wie der web-Seite, die links zu. In anderen Worten, nicht gegen die "same-origin" - Regel.
Das einzige, was sein könnte, aus der Ferne verursachen, dies ist mein applet eine Verbindung zu einem remote-ip über Sockeln... und ich kann nicht viel tun, um das zu beheben? Ich bin mir ziemlich sicher, dass beide der .jar-Dateien, die es versucht, Zugriff auf den gleichen webserver, es sei denn, er versucht es von irgendwo anders als der man in das Verzeichnis
Gibt es einen einfachen Weg, um zu diagnostizieren, welche Zeile der Fehler kommt, weil der Blick auf die stack-trace, der es nicht Zustand, wo die exception kommt, so dass es ein bisschen umständlich, um herauszufinden, wo genau der Fehler herkommt.
Sie werden wahrscheinlich sehen keine Quelle Zeilennummern im stacktrace wegen Ihrer JRE "rt.jar" Datei wurde gebaut ohne debug-Informationen. Jedoch, wenn Sie Blick auf den Quellcode ist es klar, dass es nur ein Platz in dieser Klasse, wo die exception könnte geworfen werden.
InformationsquelleAutor Stephen C
Soweit meine Forschung ging dieses problem wird verursacht, wenn java-requests der Applets und ruft eine HTTP-300 Antwort. Zunächst wird java versuchen zu laden, die komprimierte version des Applets, z.B. "yourjarfile.jar.pack.gz". Wenn der server bietet einem HTTP 404-alles funktioniert wie erwartet. Aber wenn der server bietet einem HTTP-300-response-java setzt Voraus, dass es eine Umleitung Ziel und schlägt fehl, wenn keines gesetzt.
Aus meiner Erfahrung Sie die folgenden Dinge tun kann um das Problem zu beheben auf der server-Seite:
Ich hoffe, dies hilft einige Leute.
InformationsquelleAutor
Sind Sie wahrscheinlich gegen das sandbox-policy von java-applet-Umgebung. Sie haben nicht die erforderlichen Anmeldeinformationen zu tun whtever es ist, Sie tun möchten, und Sie wusste nicht, bitten Sie den Benutzer, wenn es okay war, damit die Umgebung Sie getötet.
http://docs.oracle.com/javase/tutorial/security/tour1/step1.html
InformationsquelleAutor awiebe
Sah ich das gleiche problem auf einem Kunden-server bei der Verwendung von Java 1.7.0_09. Wenn ich mit einer älteren version von Java, dann war es kein problem. Wenn ich lief die gleiche Applet auf einen anderen server, dann kein problem.
Schließlich fand ich ein Update. Ich räumte mein Java-cache. (Dies ist anders als beim browser-cache.)
Unter Windows 7 können Sie:
Es dauerte fast eine minute, um klar mein Java-cache.
Dann alles geklappt hat.
InformationsquelleAutor