Web 应用程序如何与独立 Java 应用程序通信

How a web application can communicate to a standalone Java application

我使用 swing 创建了一个简单的独立 Java 应用程序,用于从 OMNIKEY® 3121 卡读取数据 reader 我必须将扫描的用户详细信息发送到 Web 应用程序。

我正在使用 RESTful Java 客户端将此数据发送到 Web 应用程序数据库。但是我需要将网络用户的会话 ID 连同扫描的用户详细信息传递给服务器,以识别哪个网络用户给出的卡扫描请求。为此,我需要先从服务器接收带有会话 ID 的 Java 应用程序请求。那么我怎样才能使这种交流成为可能。

如果不在 Web 应用程序中实现您的 swing 应用程序的 运行 实例的注册,这似乎是不可能的。然后,swing 应用程序可以建立 WebSocket 连接到 web 应用程序并订阅接收有关 web 应用程序用户操作的通知。

1) swing 应用程序启动后,它会使用一些唯一的 ID(例如 domain/cardreader ID)与 Web 应用程序建立 WebSocket 连接。

2) Web 应用程序用户的帐户必须link编入该唯一 ID。

3) 有了这个,swing 应用程序可以接收有关例如用户登录事件的通知,linked。

如果您的要求是使用完全独立的 swing 应用程序实例和用户帐户,您可以使用应用程序 links(用户单击此 link,浏览器使用此 url). This article 可能是个好的开始。

使用 com.sun.net.httpserver.HttpServer 从桌面 Java 应用程序创建一个 InetSocketAddress,如下所示

try {
        HttpServer hs = HttpServer.create(new InetSocketAddress(8888), 0);
        hs.createContext("/test", new HttpHandler() {
                public void handle(HttpExchange t) throws IOException {
                InputStream is = t.getRequestBody();
                System.out.println(t.getRemoteAddress().toString());
                String response = "HelloWorld!!";
                t.sendResponseHeaders(200, response.length());
                OutputStream os = t.getResponseBody();
                os.write(response.getBytes());
                os.close();
            }
        });
        hs.setExecutor(null);
        hs.start();
    } catch (IOException e) {
        e.printStackTrace();
   }

创建套接字后,您可以使用 http://localhost:8888/test 访问句柄方法。如果您尝试进行跨域访问,请求可能会被 CORS Policy 阻止。在这种情况下,您必须在 sendResponseHeaders.

之前设置访问控制相关参数,如下所示
            Headers headers = t.getResponseHeaders();
            headers.add("Access-Control-Allow-Headers","x-prototype-version,x-requested-with");
            headers.add("Access-Control-Allow-Methods","GET,POST");
            headers.add("Access-Control-Allow-Origin","*");