如何在防火墙后面使用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 Applet时,是否有任何可以阻止用户调用内部方法的步骤?
从理论上讲,可以分析大多数对象,并可以在客户端计算机上调用方法.
除了混淆之外还有其他任何可以帮助防止这种情况的步骤吗?
我的情况是确保从客户端直接发送最高分的游戏.
我试图访问我的jar文件中的目录.我想浏览目录中的每个文件.我试过,例如,使用以下内容:
URL imagesDirectoryURL=getClass().getClassLoader().getResource("Images");
if(imagesFolderURL!=null)
{
File imagesDirectory= new File(imagesDirectoryURL.getFile());
}
Run Code Online (Sandbox Code Playgroud)
如果我测试这个小程序,它运行良好.但是,一旦我把内容放入罐子里,它就不会因为几个原因了.如果我使用此代码,则URL始终指向jar外部,因此我必须将Images目录放在那里.但是,如果我使用new File(imagesDirectoryURL.toURI());它,它在jar内部不起作用,因为我得到了错误URI not hierarchical.我确定该目录存在于jar中.我怎么能得到Imagesjar里面的内容?
有人可以建议一个测试自动化工具来自动化Java applet窗口吗?要求它也能识别applet窗口中的各种按钮.
所以我们安装了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的替代选择?
对于新的选项,我是否需要编写一些新的组件或者我可以在我的插件中制作一些包装并在我的应用程序中使用它.很少有例子会受到赞赏
其他选项是否会特定于浏览器?
任何帮助和建议将受到高度赞赏.
我想在客户端使用扫描仪,在我没有问题地使用Java Applet之前,但是在chrome决定不支持Java之后,我该怎么办。如果有JS,Jquery或其他语言的解决方案,请告诉我
我正在尝试为我的网络课程运行这些applet.当我尝试在浏览器中从链接运行这些时,他们什么也没做.所以我决定尝试在IntelliJ中编译它们,但是当我运行代码时它没有做任何事情.没有返回错误消息.我从源代码中更改代码的唯一方法是添加main方法并删除包声明.以下是我试图运行的Applet:
///////////////////////////////////////
//LineSimApllet
//written by David Grangier, Institut Eurecom, France
//david.grangier@eurecom.fr
///////////////////////////////////////
//imports
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.applet.*;
import java.util.*;
//Applet Class
public class LineSimApplet extends Applet {
//buttons
Button start = new Button("Start");
Button stop = new Button("Reset");
//features lists
MyChoice length = new MyChoice(new String[]{"10 km", "100 km", "1000 km"}, new double[]{10E3, 100E3, 1E6}, 3);
MyChoice rate = new MyChoice(new String[]{"512 kps", "1 Mbps", "10 Mbps", "100 Mbps"}, new double[]{512E3, 1E6, 10E6, …Run Code Online (Sandbox Code Playgroud) applet ×10
java ×9
npapi ×2
security ×2
automation ×1
directory ×1
firefox ×1
firewall ×1
flash ×1
gui-testing ×1
jar ×1
javascript ×1
macos ×1
manifest ×1
obfuscation ×1
pdf ×1
rmi ×1
twain ×1
url ×1
wordle-game ×1