У меня есть JavaFX WebView, движок которого настроен на добавление токена в заголовок для аутентификации.
WebView webView = new WebView();
WebEngine webEngine = webView.getEngine();
webEngine.setUserAgent("foo\nAuthorization: Bearer " + token);
webEngine.load("https://hostname/app");
Насколько я понимаю, этот подход довольно хакерский, так как он в основном притворяется, что добавляет User-Agent
, но в действительности вводит новое поле заголовка Authorization
.
мой WebView направляет через обратный прокси-сервер Apache на мою размещенную веб-страницу.
<Location "/app">
ProxyPass https://localhost:8450/app
ProxyPassReverse https://localhost:8450/app
RequestHeader set VirtualUrl "/app"
</Location>
<Location "/app/ws">
ProxyPass wss://localhost:8451/events
ProxyPassReverse wss://localhost:8451/events
</Location>
Затем пытается установить JavaScript на моей веб-страницесоединение WebSocket, которое снова маршрутизируется через обратный прокси
this.websocket = new WebSocket('wss://hostname/app/ws');
Это соединение WebSocket прекрасно работает, когда выполняется через браузер, однако при попытке через WebView консоль WebView выдает:
WebSocket connection to 'wss://hostname/app/ws' failed: Unexpected response code: 400[at 0]
При отслеживании этого соединения в моих журналах apache я заметил следующую ошибку:
(22)Invalid argument: [client xx.x.xx.xxx:xxxxx] Failed to read request header line User-Agent: foo
На данный момент я предполагаю, что моя конфигурация WebView шлепает заголовок User-Agent нак моему запросу на соединение через веб-сокет, и мой обратный прокси задыхается от него.
Веб-страница загружается простоНе минус WebSocket не подключается, поэтому заголовок авторизации работает.Однако способ его внедрения конфликтует с моими запросами WebSocket.
В первую очередь я ищу то, есть ли лучший (не хакерский) способ передачи маркера заголовка с помощью WebView.Или, если есть способ настроить мой обратный прокси-сервер, чтобы понять, что означает эта строка заголовка.