这可能听起来像一个荒谬的问题,但我不得不问它,因为我有一个正在做这个的工作产品。
我在浏览器中运行了一个applet。这个applet不仅仅是任何applet,而是一个相当复杂的CRM / ERP包应用程序。供应商公司告诉我,他们能够监控用户在applet中做了什么,通过在运行之前用自己的applet替换applet的主类。使用的术语是"支持"。
我现在有点无能为力。你怎么能看到applet内部并听取用户点击和键盘事件,即使你可能以某种方式入侵它?我可以告诉你,这是一个真实的故事,因为我已经看到了这家供应商公司的应用程序,它只是在后台并记录了所有的上下文信息(例如,用户填充了applet中的哪个文本框,名称文本框等等。)
他们是否在课堂上加载任何黑客(我觉得这很愚蠢),或者我在Java中没有遇到过的其他东西会让你做一些“城市传奇”的事情。像这样?
答案 0 :(得分:1)
使用HTML标记加载Java Applet:
<applet archive="ApplicationSP1.jar,Application.jar" code="Main.class" name="myApp" width="800" height="600"></applet>
如您所见,“archive”属性支持多个.jar文件。
您可以使用此技术通过将它们放在ApplicationSP1.jar文件中来加载您自己的应用程序Java类的版本。它们将在存储在第二个Application.jar中的类之前加载。
显然,你需要做一些逆向工程来理解原始应用程序中哪些类要覆盖或换行。然后,您必须创建与您要覆盖的名称完全相同的新名称(相同的包名和类名)。
其他选项是开发Aspects来捕获应用程序中的事件,并在HTML applet标记的archive属性中使用多个.jar的相同技术加载这些方面。
答案 1 :(得分:0)
可以在中找到捕获Swing / AWT事件的解决方案 Want javax.swing hook that tells me WHICH component in the hierarchy is executing an action
重写从浏览器启动的applet使用的Swing / AWT类很难。 他们必须打破Java安全管理器的保护并获得JRE认可的库文件夹的写入权限。 对于这种情况,如果没有最终用户的手动操作,Java Endorsed Standards Override Mechanism很难实现。