微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从浏览器访问 USB 智能卡数据

如何解决从浏览器访问 USB 智能卡数据

我正在构建一个基于企业浏览器的应用程序,该应用程序可在带有触摸屏的专用 PC 上运行(将其视为自助服务终端)。因此,应用程序本身是建立在 NodeJS 上的,用户在浏览器上做出选择并插入他们的智能卡。由于 JavaScript 不能直接读取和解密智能卡数据,因此在这台 PC 上运行的 Java 程序检测插入的智能卡并读取数据。现在,问题是将此智能卡详细信息(姓名、地址等)发送到 JS 代码。我不太确定如何解决这个问题,以下是一些想法:

  1. Java 智能卡读卡器在读取数据后,将其作为键盘输入输出。 JS 代码然后侦听这个特定的键盘事件并读取所有数据。有点像条形码扫描仪的工作原理。
  2. Java 智能卡读卡器和浏览器连接到云端并建立了 WebSocket 通道。 Java 程序读取数据后,将其推送到云服务器,云服务器再通过 WebSockets 将其推送到浏览器。
  3. 使用自签名 SSL 证书将 Java 智能卡读卡器作为网络服务器 (localhost) 运行。在hosts文件中为服务器添加本地域名。现在,浏览器可以通过 Http API 直接与 Java 网络服务器通信。
  4. 使用 gRPC (localhost) 运行 Java 智能卡读卡器,并通过 gRPC-web 将浏览器连接到它。 (我没有 gRPC 方面的经验,但也许这是可能的?)

以上每个都有自己的陷阱。我不确定其他基于 Kiosk 的系统如何工作,因此对上述想法的任何建议或改进都会很棒。

解决方法

这里最好的解决方案可能是在 127.0.0.1 的 Java 应用程序中使用 Jetty 托管 WebSocket,并让您的 javascript 直接连接到该。不需要云服务器,因为 WebSockets 没有绑定到同源策略或跨源资源共享。

另一种可能的解决方案是使用 javafx 的 webkit 或其他 java 浏览器实现在您的 java 程序中嵌入一个浏览器,并通过它共享数据。这不太理想,因为 javafx 的 webkit 有自己的怪癖,而且用于 Java 的商用嵌入式浏览器要花费数千美元。

我会使用 websocket 解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。