直接从Browser发送数据到Java Desktop应用程序

时间:2018-05-06 11:23:30

标签: java typescript browser server client

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

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

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

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

Registering my Java Desktop application to an URI scheme只允许我使用自定义URI作为参数启动桌面应用程序,并且只有Windows,因此这不是一个令人满意的解决方案。

1 个答案:

答案 0 :(得分:0)

我理解您的设置如下:

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

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

解决方案是在您的网页和桌面应用程序之间建立HTTP连接,如下所示:

  • 您的桌面应用程序必须包含嵌入式servlet容器,例如undertow,它将服务器套接字绑定到127.0.0.1:yourPort
  • 嵌入式servlet容器需要CORS Filter,因为网页的来源肯定与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 working draft,因此将127.0.0.1作为可能值得信赖的访问权考虑:没有混合内容警告。

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