之前有没有遇到过这个?它让我在使用appplet时遇到了很多麻烦。我认为它不起作用的原因是由于我的程序中的套接字与服务器通信。但是,我无法弄清楚如何阻止它,谷歌没有帮助。我无法得到一个例外,因为谷歌浏览器的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
编辑:这是我用来加载applet的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}
小于&amp;由于它不喜欢我试图用它们装东西,所以取代了大于标志。
编辑#2:我已经对罐子进行了自签名,这仍然在发生。我还没有弄清楚如何解决这个问题。
最终编辑:经过几个小时的努力,我终于遇到了一个解决方案,感谢irc频道的朋友。以下是修复方法的一般要点:
注意:确保小程序已签名!! 希望这可以帮助其他人解决我遇到的问题。
答案 0 :(得分:4)
您的applet违反了“Same-Origin”限制,这是一个默认的Applet安全限制,旨在保护用户免受恶意applet的攻击。</ p>
有关限制的解释及其实施原因,请参阅this blog post。
你能做些什么?最好的方法是重新设计您的applet和/或服务,以便重定向被完全删除,或者重定向到不违反限制的URL。如果这不是一个选项,您将需要使您的applet成为“受信任的applet”;例如请参阅this tutorial了解问题。
<强>更新强>
我错误地认为applet是一个值得信赖的applet。它无济于事。我查看了OpenJDK源代码(here和here),看来无论安全策略如何,都会执行“同源”安全检查。 (查找使用该消息抛出异常的代码...)
因此,您唯一的选择是从与链接到它的网页相同的主机和端口提供applet。换句话说,不要违反“同源”规则。
答案 1 :(得分:2)
就我的研究而言,只要java请求applet并获得HTTP 300响应,就会引发此问题。首先,java将尝试加载applet的压缩版本,例如, “yourjarfile.jar.pack.gz”。如果服务器提供HTTP 404,则一切都按预期工作。但是,如果服务器提供HTTP 300响应,则java假定存在重定向目标,并且如果没有设置则会失败。
根据我的经验,您可以执行以下操作来解决服务器端的问题:
我希望这可以帮助一些人。
答案 2 :(得分:0)
您可能违反了Java applet环境的沙箱策略。您没有所需的凭据来执行任何操作,并且您没有询问用户是否正常,因此环境会使您丧命。
http://docs.oracle.com/javase/tutorial/security/tour1/step1.html
答案 3 :(得分:0)
在使用Java 1.7.0_09时,我在客户的服务器上看到了同样的问题。如果我使用的是早期版本的Java,则没有问题。如果我在不同的服务器上运行相同的Applet,那么没问题。
我终于找到了解决办法。我清除了我的Java缓存。 (这与浏览器缓存不同。)
在Windows 7上,您可以:
清理我的Java缓存花了差不多一分钟。
然后一切正常。