您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在浏览器沙箱中运行时,签名的Java Applet是否可以访问USB外设?

在浏览器沙箱中运行时,签名的Java Applet是否可以访问USB外设?

在浏览器沙箱中运行时,签名的Java Applet是否可以访问USB外设?

解决此特定问题(并避免使用以下注释中涉及的特定技术),可以,已签名的Java Applet可以访问USB外围设备。当您运行签名的小程序时,“沙箱”就是您可以“突围”的功能

但是出于安全原因,仅对applet签名并不能自动授予对沙箱外部项目的访问权限。

PrivelegedAction似乎是访问特权系统组件(例如打印机)的首选方法。Oracle在此处提供了有关这些特权操作的更多信息:http ://docs.oracle.com/javase/7/docs/api/java/security/AccessController.html

另外,在Web浏览器中执行此类操作时还需要考虑一些因素,因为Java会关注操作的来源。

public function writeFile() {
    ...
    FileWriter fw = new FileWriter(...);
    ...
}


public void init() {
    writeFile();
}

例如,如果您要$HOME/Desktop/text.txt使用FileWriterapplet init()方法中的类将文件写入文件系统(即),则Signed Applet 通常会 允许它。将其包装为aPrivilegedAction会更好,并且首先使用权限检查AccessController.checkPermission(...)是理想的。

但是,FileWriter直接从JavaScript(而不是从init())直接调用时会被阻塞:

var myapplet = document.getElementById('myapplet');
myapplet.writeFile(); // Blocked by Security Framework

为了避开此问题,有人选择使用PrivelegedAction,但是,如果操作花费很长时间,您会注意到它阻止了UI,这在网页中是非常不好的做法(并且可能使浏览器死锁)。

public void init() {
   ...
   AccessController.doPrivileged(new PrivilegedAction() {
      public Object run() {
         writeFile();
         return null;
      }
   });
   ...
}

此外,您的问题专门询问有关访问USB外围设备的信息,这通常是通过遍历人机界面设备来完成的。HID并不是Java本身直接支持的东西(但是,截至编写this / JRE7为止)。因此,可以,一个签名的applet可以与您的USB外设通信,但是您将需要使用某种形式的Java Native Interface(JNI)来正确地“访问”它们。JNI支持跨平台(即通过JAR分发DLL和SO)可能会一团糟。

大多数Java Applet所做的是访问本地安装的打印机并使用标准的Java打印库。这就是我们在qz- print项目中所做的工作,您可以在此处自由查看我们的源代码https : //github.com/qzindustries/qz- print/tree/master/qz-print/src/qz它使用由init()和boolean标志触发的线程来触发所有特权函数

java 2022/1/1 18:26:45 有358人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶