如何解决从浏览器访问 USB 智能卡数据
我正在构建一个基于企业浏览器的应用程序,该应用程序可在带有触摸屏的专用 PC 上运行(将其视为自助服务终端)。因此,应用程序本身是建立在 NodeJS 上的,用户在浏览器上做出选择并插入他们的智能卡。由于 JavaScript 不能直接读取和解密智能卡数据,因此在这台 PC 上运行的 Java 程序检测插入的智能卡并读取数据。现在,问题是将此智能卡详细信息(姓名、地址等)发送到 JS 代码。我不太确定如何解决这个问题,以下是一些想法:
- Java 智能卡读卡器在读取数据后,将其作为键盘输入输出。 JS 代码然后侦听这个特定的键盘事件并读取所有数据。有点像条形码扫描仪的工作原理。
- Java 智能卡读卡器和浏览器连接到云端并建立了 WebSocket 通道。 Java 程序读取数据后,将其推送到云服务器,云服务器再通过 WebSockets 将其推送到浏览器。
- 使用自签名 SSL 证书将 Java 智能卡读卡器作为网络服务器 (localhost) 运行。在hosts文件中为服务器添加本地域名。现在,浏览器可以通过 Http API 直接与 Java 网络服务器通信。
- 使用 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 举报,一经查实,本站将立刻删除。