我有一些非平凡的计算代码需要应用于已下载到浏览器DOM中并从用户交互中捕获的数据。我不希望公开这段代码。我想知道是否:
Q& A如usability of Java applets in the web和其他几个人也令人沮丧。
我的问题是:Java applet是一种死技术。这些天在这个主题上甚至没有Q& A!此外,Java可能并不总是与所有浏览器(台式机,平板电脑或移动设备)捆绑在一起?
是否有更好的方法来实现相同的隐藏代码,利用客户端cpu / ram,最大限度地减少数据流量?
网页位于Javascript / html5 / css上。服务器只提供JSON / XML。数据包为10-20KB并经常更新。计算是昂贵的并且是特定于客户端的,所以我真的想使用客户端来完成所有这些。
非常感谢。
答案 0 :(得分:17)
我认为applet的最大缺点是它假设你在客户端机器上安装了JRE。这真的是一个可行的假设吗? 当然,您也可以提供下载和安装JRE,但为什么只为进行一些计算而烦恼呢? 我会问自己的另一个问题,您的客户可以是手机,平板电脑等吗?如果是这样,也许Java Script是更好的选择。
还有5美分:)你提到'开启眼睛java脚本' 您应该明白,保护计算代码的唯一真正方法是将计算放在服务器上。我的意思是,即使你有一个编译的二进制代码,java的程序集对于熟练的攻击者也很容易理解。你提到的混淆(它的混淆,而不是签名jar)使它稍微困难但仍然不是不可能。
我在这里看到的唯一问题是,如果你有很多客户端同时运行计算,并且你将计算负担放在服务器上,它最终会崩溃。
只是我的想法,希望这会帮助你选择最好的方向......
答案 1 :(得分:10)
截至2015年9月,他们已经死了。使用applet有利有弊。但Chrome停止支持他们,所以通过使用它们,您根本不支持Chrome for desktop,而且当涉及移动浏览器时,哪些支持NPAPI?
官方oracle公告:
Chrome不再支持NPAPI(Java applet所需的技术) 用于Web浏览器的Java插件依赖于跨平台插件 体系结构NPAPI,已得到所有主要Web浏览器的支持 十多年了。谷歌的Chrome版本45(计划发布 在2015年9月)放弃对NPAPI的支持,影响插件 Silverlight,Java,Facebook Video等基于NPAPI的类似 插件。
Java应用程序通过Web浏览器作为Web提供 启动应用程序(一旦它们不与浏览器交互 已启动)或作为Java小程序(可能与之交互) 浏览器)。此更改不会影响Web Start应用程序 影响小程序。
如果您在使用Chrome,Oracle访问Java应用程序时遇到问题 建议使用Internet Explorer(Windows)或Safari(Mac OS X) 代替。
编辑
Microsoft Edge也不支持它们。这是对已经濒临死亡的Java Applets的又一次打击。
编辑2
Mozilla宣布
重要提示:新的64位版本的Firefox for Windows不支持 识别或支持此插件。请参阅此Mozilla博客文章 的信息。
所以是的。 Java小程序已经死了。
编辑3 Oracle使用Java 9正式杀死了them
答案 2 :(得分:2)
..编写Java Applet(签名隐藏代码)
代码签名是为了用户的保护,而不是我们的(或用于保护代码)。它只是添加额外的文件。也许您正在考虑混淆,这使得窃取代码变得更加困难。实际上,混淆的JS比数字签名(但不是混淆)的Java类更难解读。
保护代码的唯一真正解决方案是将重要部分留在服务器上。 JS可能可以处理大多数(如果不是全部)用户/浏览器/服务器交互,因此Java applet可能在其中扮演的唯一部分是可视化返回的(计算的)数据。即便如此,我也可能想方设法在HTML 5 Canvas中显示结果。
所以你问题的答案......
Java Applets - 今天它是错误的选择吗?
对于此用例是的。 applet在纯JS / Canvas中提供的内容很少或根本没有添加任何服务器上的繁重工作。
答案 3 :(得分:1)
John Demetriou提供了非常好的信息。
另外,现在(2017年7月)只有Firefox和Internet Explorer(也许Safari不确定)允许使用applet。如果您满足以下3个要求,则可以使用它们:
您可以通过在浏览器中输入html的位置来访问Java小程序。您仍然可能会收到一个提示,请求是否运行Java,所以请接受。
我只提供此信息只是为了让人们有办法运行applet。但是,由于某种原因,applet被禁用,它们允许许多安全漏洞。仅使用它们来学习他们的技术并获得一些见解。不推荐在其他地方使用。
答案 4 :(得分:-1)
当您必须使用客户端计算机时,小程序将始终是一个不错的选择,即:使用生物识别解决方案或硬件等。
但是,如果你只需要化妆品或计算能力,我想更好的方法是重构代码,让它变得轻盈和干净,尽可能少的条件。如果您有单独的服务器计算机(例如DB和IIS),则使用某些视图或SP可能会有所帮助。
我被锁定在一个项目中,唯一的解决方案是applet,...另一个选择是ActiveX,但它将我的客户端锁定到IE,我们不想要它。
答案 5 :(得分:-2)
首先,Java Applet是一项不断发展的技术,远未消亡。其次,浏览器和用户安装正在下降。有些人使用衰落的安装来声称Java正在死亡,但这是假的,因为Java Applet的实际使用总是比安装的插件少得多。
但是根据你的描述,我可能不会选择Applets。它是一种强大的技术,我将与用户群一起使用,我知道可以安装他们需要的任何东西以便使用它。它对游戏,内部网站等有好处。在Intranet上,IT可以确保applet适用于需要使用它的所有桌面。
但在你的情况下,我会使用Vaadin。它使用JavaScript将Java应用程序转换为Web应用程序。此外,它保护您的代码,这是Vaadin的主要功能。大多数代码将作为服务器上的Java代码运行,只有GUI前端在浏览器中运行。
因此,Vaadin比Applet慢得多(因为JavaScript)。它也比大多数其他Web框架慢得多,因为它严重依赖于在服务器上运行代码。这当然也意味着您的计算不会被转换为JavaScript并传输到客户端计算机。
但是,您将无法访问功能强大的Swing API。 Vaadin有自己的类似Swing的API,只能覆盖Swing可以做的一小部分。但另一方面,没有其他Web框架可以做Swing可以做的事情。
真的没有办法满足你的所有愿望。如果您使用客户端进行计算,您将公开您的计算。没有办法解决这个问题。即使您在C ++中编写本机应用程序,它仍然可以反向生成并提取您的计算。因此,我建议您在服务器上运行计算,并找到向用户收费的方法。这正是你使用Vaadin时的所作所为。
另一方面,如果你想在客户端上进行计算,你真的应该使用Java Applets。在进行计算时,Java比JavaScript更快。 Flash比JavaScript更快,但Java仍然更快。