栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在浏览器沙箱中运行时,签名的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
使用
FileWriter
applet
init()方法中的类将文件写入文件系统(即),则Signed Applet 通常会 允许它。将其包装为a
PrivilegedAction
会更好,并且首先使用权限检查
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标志触发的线程来触发所有特权函数。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/515592.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号