如何在防火墙后面使用RMI和applet客户端?
如何将RMI与防火墙服务器和防火墙applet客户端一起使用?(如果可能的话)
我知道RMI服务器使用端口1099(默认情况下,这是可配置的); 但是在此之后,通信需要在不同的随机端口上使用新的套接字.我也知道你可以在客户端上为RMI over HTTP隧道设置代理,这在理论上应该解决我的问题.但我无法使其工作(我尝试在我的XP客户端上设置环境属性,但Internet Explorer一直忽略它们).
我试图找出为什么这个特定的代码片段对我不起作用.我有一个applet,应该读取.pdf并用pdf-renderer库显示它,但出于某种原因,当我读入位于我服务器上的.pdf文件时,它们最终会被破坏.我已经通过再次写出文件来测试它.
我尝试在IE和Firefox中查看applet,并且发生了损坏的文件.有趣的是,当我尝试在Safari(对于Windows)中查看applet时,该文件实际上很好!我理解JVM可能会有所不同,但我仍然迷失方向.我已经用Java 1.5编译了.JVM是1.6.读取文件的代码段如下.
public static ByteBuffer getAsByteArray(URL url) throws IOException {
ByteArrayOutputStream tmpOut = new ByteArrayOutputStream();
URLConnection connection = url.openConnection();
int contentLength = connection.getContentLength();
InputStream in = url.openStream();
byte[] buf = new byte[512];
int len;
while (true) {
len = in.read(buf);
if (len == -1) {
break;
}
tmpOut.write(buf, 0, len);
}
tmpOut.close();
ByteBuffer bb = ByteBuffer.wrap(tmpOut.toByteArray(), 0,
tmpOut.size());
//Lines below used to test if file is corrupt
//FileOutputStream fos = new FileOutputStream("C:\\abc.pdf");
//fos.write(tmpOut.toByteArray());
return bb;
}
Run Code Online (Sandbox Code Playgroud)
我一定是在遗漏一些东西,而且我一直在试图解决这个问题.任何帮助是极大的赞赏.谢谢.
编辑: 为了进一步说明我的情况,我在阅读之后使用片段和之后的文件中的差异是,我在阅读后输出的内容明显小于原来的内容.打开它们时,它们不会被识别为.pdf文件.没有任何例外被抛出我忽略,我试着冲洗无济于事. …
由于实施错误很小,我发现我能够多快地解决Java堆空间问题
现在错误已修复一切都很好,但它确实让我研究如何解决这个问题,并且我提出了多种解决方案,例如
java -Xms5m -Xmx15m MyApp
问题是这会改变我计算机上的java内存,但我正在开发一个将在webrowser中使用的Applet.
因此,有一种方法,在APPLET的RUNTIME中改变堆大小?
是否有可用的服务响应最新版本的Java?
我正在为使用applet的应用程序编写系统检查.作为检查的一部分,我想告知用户是否可以下载新版本的Java.是否有任何在线服务只响应最新Java版本的版本号?
我已经准备好了一些小程序.我试着在Android平板电脑上运行它.它根本不起作用吗?我不确定?有谁知道这个?
或者是在android之后.Java不是平台独立的 - ;)
我构建了一个简单的Java applet,它在本地完美运行.当我将我的网站上传到Azure(作为Cloud Service)时,它显示一个灰色框.
我尝试过Win XP,Win 7,JRE 6,JRE 7和不同的浏览器.Java控制台不显示任何消息.
知道发生了什么事吗?
所以我们安装了Java 7u21版本,该版本应该会加强applet的安全性.不幸的是,它收紧了很多,以至于我们的applet不再运行了.不好.
有趣的是,它只在我们使用JWS操作时才停止工作.如果我们从标准网页将其作为标准小程序启动,一切正常.
在JWS模式中,我们至少会在反射和问题上遇到安全问题java.lang.Thread.setDefaultUncaughtExceptionHandler.
证书看起来不错.
来自Oracle的发行说明没有提供与JWS相关的任何内容的大量输入.
因此,我对社区的问题是:有没有人有想法或(甚至更好)解决这个问题?
与给定建议/评论相关的其他信息:
这个小程序由全球数百个第三方客户运行,因此不幸的是,更改安全策略是不可取的.该问题对于客户来说是可重现的.但我可以确认更改策略文件可以解决问题.
当我从Eclipse启动的Tomcat运行applet时(因此当然没有签名的applet),它会按预期在浏览器中显示警告通知.作为一个容易上当的人,我允许applet运行,因为它是从我自己的开发环境启动的.这仍然会导致安全性失败.
我已经考虑过,如果这是Java中的错误,但我想看看是否有其他人看到同样的问题.我想我们都知道修复bug的Oracle周转时间并不总是最好的......
感谢您的任何意见.
非常感谢Tony,你的建议让我能够在7u21中创建applet,正确地说; 我认为这是一个向前的步骤,我正在通过浏览器签署和唤醒许多小程序,这些超过7u21.我今天早些时候不想这样做.但是我被困了几个小时,事实上我还没有从我的遗留应用程序中唤醒我的第一个第三方小程序(即在JVM 1.6或更老版本中工作正常).
涉及的applet,我签了他们,但我总是得到错误:SecurityException - "Bad applet class name".我有一些小程序,并且html代码调用它们,问题是我的第一个小程序链(在调用链中没有任何其他)可能不像其他签名小程序正在做的那样(这些小程序来自java网站进行培训) ),这个第3方applet简单不运行并抛出上面提到的异常.我的第三部分applet我不知道它在内部做了什么.对不起,如果没有源代码,我可能会要求提供一个不容易解决的特殊情况,但是,无论如何,请相信告诉我任何想法.
最好的祝福
我是Wordle的作者,Wordle是野外少数幸存的Java小程序之一.
最近,我收到用户报告,警告我的(已签名)applet很快将被JRE黑名单,因为它没有在其清单中明确指定"Permissions"属性.所以,现在MANIFEST.MF 正确指定了
Permissions: sandbox
Run Code Online (Sandbox Code Playgroud)
和<applet>标签包括神奇
<param name="permissions" value="sandbox" />
Run Code Online (Sandbox Code Playgroud)
param,记录在案.
现在,那些向后弯腰安装OS X JRE 7的人可以毫无困难地运行Wordle,但是人们(像许多学校IT管理员一样)坚持使用JRE 6根本无法运行applet; 他们得到
java.lang.SecurityException: JAR manifest requested to run in sandbox only:
http://wordle.appspot.com/j/v1390/wordle.jar
at com.sun.deploy.security.DeployManifestChecker.verify(DeployManifestChecker.java:106)
at com.sun.deploy.security.DeployManifestChecker.verify(DeployManifestChecker.java:84)
at com.sun.deploy.security.TrustDecider.isAllPermissionGranted(TrustDecider.java:319)
at com.sun.deploy.security.TrustDecider.isAllPermissionGranted(TrustDecider.java:280)
at com.sun.deploy.security.TrustDecider.isAllPermissionGranted(TrustDecider.java:270)
at sun.plugin2.applet.Plugin2Manager.isAppletSigned(Plugin2Manager.java:3289)
at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:3207)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1536)
at java.lang.Thread.run(Thread.java:695)`
Run Code Online (Sandbox Code Playgroud)
症状表明Java 6插件假定签名的applet应该以all-permissions模式运行,并认为sandbox清单中的请求是错误的.换句话说,它忽略permissions了applet标签中的参数.
除了将applet设置为以all-permissions模式运行之外,有没有人知道我可以帮助我的用户?我宁愿保持沙盒,因为我不希望人们害怕使用Wordle,因为我不想创建一个攻击面.
我的问题是关于2014年12月不支持NPAPI插件的Chrome公告.火狐也遵循相同的原则.我在我的一个遗留应用程序中有一个基于NPAPI的插件,直到现在一直运行良好但在Chrome和Firefox的公告后我正在寻找替代方案.
我想问专家:
什么可以作为NPAPI的替代选择?
对于新的选项,我是否需要编写一些新的组件或者我可以在我的插件中制作一些包装并在我的应用程序中使用它.很少有例子会受到赞赏
其他选项是否会特定于浏览器?
任何帮助和建议将受到高度赞赏.