Я хочу использовать веб-сокеты ( sockJS с Stomp ) в загрузочном приложении Spring, которое имеет аутентификацию на основе токенов с помощью Json Web Token (JWT). На сервере есть фильтр, который проверяет токен JWT. Этот токен отправляет заголовки запроса, но клиентский API SockJS не поддерживает заголовки. Это означает, что когда API-интерфейс клиента SockJS пытается выполнить рукопожатие websocket с сервером, как, например:
new SockJS("http://localhost:8080/websocket")
HTTP-запрос будет перехвачен фильтром авторизации JWT, и рукопожатие не будет выполнено, так как в запросе нет заголовков, и, следовательно, запрос будет отклонен фильтром. Я видел несколько обходных путей, предложенных на форумах, но ни один из них не подходит для этого сценария:
- HandshakeInterceptor: это решение не работает, потому что фильтры всегда выполняются перед перехватчиками.
- Отправка заголовка аутентификации на заголовках STOMP также не работает, потому что STOMP-соединение происходит после рукопожатия, естественно.
Я обнаружил здесь , что можно отправить токен по URL-адресу рукопожатия SockJS через параметры запроса, и мне придется изменить фильтр аутентификации, чтобы также искать параметры запроса, а не только заголовки. Мне не очень нравится это решение для отправки токена по параметрам запроса из соображений безопасности. Есть ли лучшая альтернатива или это действительно лучший из возможных подходов?