繁体   English   中英

将数据直接从浏览器发送到Java Desktop应用程序

[英]Sending data directly from Browser to Java Desktop application

我正在使用TypeScript作为客户端脚本语言来制作Web应用程序。 我使用的其他技术是Spring BootPostgreSQLAngular 当用户单击网站上的按钮时,我已经运行的Java桌面应用程序(与Web应用程序“独立”,而不是Web应用程序的服务器的“独立”)应接收从Web应用程序发送的数据,然后提示用户将其导入到Desktop中应用。

如何才能做到这一点? 有可用的示例代码吗?

是否可以在桌面应用程序上启动一个简单的侦听器服务器,以等待客户端(浏览器)将导入数据的有效负载发送到侦听服务器(以与平台无关的方式)?

请注意,这不同于从Internet资源下载数据的桌面应用程序,因为该资源应由浏览器本身中的单击确定 ,而不是通过桌面应用程序的界面来确定。

将我的Java Desktop应用程序注册到URI方案仅允许我以自定义URI作为参数启动Desktop应用程序,并且它也仅是Windows ,因此也不是令人满意的解决方案。

我了解您的设置如下:

浏览器<-通过Internet的HTTP / HTTPS-> SpringBoot

浏览器中呈现的网页应与本地桌面应用程序通信。

解决方案是按照以下步骤在网页和桌面应用程序之间建立HTTP连接:

  • 您的桌面应用程序必须包括嵌入式servlet容器,例如将服务器套接字绑定到127.0.0.1:yourPort的undertow
  • 嵌入式Servlet容器需要一个CORS过滤器,因为网页的来源肯定不同于127.0.0.1。
  • 该网页只是借助XMLHttpRequest打开一个连接,例如
     var req = new XMLHTTPRequest(); req.open("POST", " http://127.0.0.1:yourPort "); req.setRequestHeader("content-type", "application/x-www-form-urlencoded"); req.send("payload="+ myPayload); 

当浏览器与SpringBoot服务器建立HTTPS连接时,由于安全的Web上下文(您的网页)通过HTTP访问资源,浏览器可能会显示“混合内容警告”。

幸运的是,最近的现代浏览器(例如Chrome,Firefox,Edge和Safari)实现了W3C Secure Contexts工作草案 ,因此将对127.0.0.1的访问视为潜在可信任:没有混合内容警告。

但是,如果将其投入生产,则必须知道您的桌面应用程序现在容易受到XSS攻击。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM