Ошибка 403 при рукопожатии веб-сокета при использовании загрузочного приложения Stomp Java Spring в веб-приложениях Azure - PullRequest
0 голосов
/ 03 апреля 2019

Я развернул весеннюю загрузку Java с приложением websocket, которое работает локально в веб-приложении azure.Когда я попадаю на страницу html, я получаю сообщение об ошибке

websocket.js: 6 Соединение WebSocket с 'wss: //ctiadapter.azurewebsites.net/ws/806/0qbqlnon/websocket' не удалось: Ошибка во время рукопожатия WebSocket:Неожиданный код ответа: 403

Я предполагаю, что веб-приложения обратного прокси используют веб-приложения, но не уверены, как это исправить или обойти.

Я ценю любые отзывы.

1 Ответ

0 голосов
/ 03 апреля 2019

На самом деле сначала, когда вы создали веб-приложение Azure и настроили его в Application settings, вам необходимо включить функцию Web sockets, как показано ниже.

enter image description here

Чтобы попытаться воспроизвести вашу проблему, я скачал последнюю версию spring-guides/gs-messaging-stomp-websocket с https://github.com/spring-guides/gs-messaging-stomp-websocket/releases. И затем, чтобы создать исполняемый файл JAR с помощью gradlew build и загрузить его по пути site/wwwroot моего существующего WebApp.через консоль Kudo и настройте файл web.config для его запуска.

enter image description here

Вот содержимое web.config.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
        </handlers>
        <!-- <httpPlatform processPath="%JAVA_HOME%\bin\java.exe" -->
        <httpPlatform processPath="D:\Program Files\Java\jre1.8.0_181\bin\java.exe"
                      arguments="-Djava.net.preferIPv4Stack=true -Dserver.port=%HTTP_PLATFORM_PORT% -jar &quot;%HOME%\site\wwwroot\gs-messaging-stomp-websocket-0.1.0.jar&quot;">
        </httpPlatform>
    </system.webServer>
</configuration>

Затем у меня возникла та же проблема, что и у вас, когда я открываю https://<my webapp name>.azurewebsites.net и нажимаю кнопку Connect, чтобы установить соединение через веб-сокет с сервером.

enter image description here

Я заметил, что websocket запрос использует wss:// с SSL.Поэтому я попытался получить доступ к http://<my webapp name>.azurewebsites.net для выполнения тех же операций, он работает неожиданно.

enter image description here

Я искал и исследовал его и пример исходного кодаЯ думаю, что в этом примере отсутствует поддержка Spring Security WebSocket.Вы можете обратиться к старому блогу Spring Preview Spring Security WebSocket Support и следовать документу Spring Security о WebSocket Configuration , чтобы исправить это.Существует два персональных репозитория GitHub BijanVan / Spring-Boot-Websocket-Sample и rstoyanchev / spring-websocket-portfolio , каждый из которых использует org.springframework.security.config.annotation.web.socket.AbstractSecurityWebSocketMessageBrokerConfigurer для поддержки WebSocket с SSL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...