在浏览器沙箱中运行时,签名的Java Applet是否可以访问USB外设?
|
我已经实现了Java软件包,该软件包具有操作POS打印机和通过USB连接到工作站的现金抽屉的功能。我还实现了一个applet,以利用此程序包的功能,并希望由POS网站调用它。
当小程序从Eclipse中运行时,一切顺利。当从浏览器中运行小程序时,我的程序包似乎无法访问通过USB连接的外围设备。我从第三方(JavaPOS)代码中得到了一个错误,指出:
jpos.JposException:设备
通讯渠道无法
打开,检查设备,然后重试。
小程序已通过自认证进行签名。我会发布一些代码,但是错误是从埋在使用中的POS打印机的制造商特定驱动程序中的某个位置引发的。
我以为问题是从浏览器沙箱内部,小程序无法访问通过USB连接的外围设备。
可能是这样吗?如果是这样,是否可以从已签名的Applet中访问USB外设?
如果小程序无法访问USB外设,那么网站如何调用可以的代码?
没有找到相关结果
已邀请:
4 个回复
渐首洽陈染
例如,如果要使用applet init()方法中的
类将文件写入文件系统(即
),则Signed Applet通常会允许它。将其包装为
会更好,最好先使用
检查权限。 但是,直接从JavaScript(而不是从init())直接调用
时会被阻止:
为了避免这个问题,有些人选择使用“ 0”,但是,如果操作花费很长时间,您会注意到它阻止了UI,这在Web页面中是非常不好的做法(并且可能使浏览器死锁)。
此外,您的问题专门询问有关访问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标志触发的线程触发所有特权函数。
磐乓铝举
的开头行中,请呼叫
。然后尝试连接到USB。 如果小应用程序是受信任的,则对ѭ12the的调用将成功,并删除
的最后残余。 (是的,即使是受信任的applet也具有安全管理器,对于沙盒应用程序的安全管理器的限制要少得多。) 如果现在发现USB,则表明受信任的安全管理器已更改。最近发生了许多这样的变化。 请注意,我不建议将这样的代码投入生产。如果您的小程序与其他小程序在同一JRE中运行,则使SM无效也可以提升其他小程序的特权。
芦歉竭皑
看来JRE安装存在权限问题。重新安装JRE可以很快解决问题。
孝箱捆讨