Как веб-приложение может взаимодействовать с автономным приложением Java - PullRequest
0 голосов
/ 04 октября 2019

Я создал простое автономное Java-приложение с использованием Swing, которое используется для считывания данных с карт-ридера OMNIKEY® 3121, и я должен отправить отсканированные данные пользователя в веб-приложение.

Я отправляю эти данные в базу данных веб-приложения с помощью клиента RESTful Java. Но мне нужно передать идентификатор сеанса веб-пользователя на сервер вместе с отсканированными данными пользователя для идентификации запроса сканирования карты, который задает какой-либо веб-пользователь. Для этого мне нужно сначала получить запрос в приложении Java с идентификатором сессии с сервера. Так как я могу сделать это общение возможным?

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Это кажется невозможным без реализации регистрации запущенного экземпляра вашего Swing-приложения в веб-приложении. Затем приложение Swing может установить соединение WebSocket с веб-приложением и подписаться на получение уведомлений о действиях пользователей веб-приложения.

1) После запуска Swing-приложения оно устанавливает соединение WebSocket с веб-приложением, используя некоторый уникальный идентификатор, например, идентификатор домена / устройства чтения карт.

2) Учетные записи пользователей веб-приложения должны быть связаны с этим уникальным идентификатором.

3) При этом приложение Swing может получать уведомления, например, о входе в события пользователей,связанный с ним.

Если ваше требование заключается в использовании полностью независимых экземпляров Swing-приложений и учетных записей пользователей, вы можете использовать ссылки на приложения (пользователь нажимает эту ссылку, и браузер запускает ваше Swing-приложение с этим URL). Эта статья может быть хорошим началом.

0 голосов
/ 10 октября 2019

Создайте InetSocketAddress из настольного Java-приложения, используя com.sun.net.httpserver.HttpServer, как показано ниже

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();
   }

После создания сокета вы можете нажать метод handle, используя 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","*");
...