Доступ к заголовкам Http в Spring WebSocket Service - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь получить доступ к заголовкам HTTP (из исходного запроса на обновление https) в весенней службе веб-сокетов.

Насколько я понимаю, я должен иметь возможность сделать это с помощью HandshakeInterceptor.У меня есть перехватчик вроде:

public class WebsocketHandshakeInterceptor implements HandshakeInterceptor {

  public WebsocketHandshakeInterceptor() {
  }

  @Override
  public boolean beforeHandshake(
      final ServerHttpRequest request,
      final ServerHttpResponse response,
      final WebSocketHandler wsHandler,
      final Map<String, Object> attributes) throws Exception {
    if (request instanceof ServletServerHttpRequest) {
      ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
    }
    return true;
  }

  @Override
  public void afterHandshake(
      final ServerHttpRequest request,
      final ServerHttpResponse response,
      final WebSocketHandler wsHandler,
      final Exception exception) {
  }
}

Но оба объекта request и servletRequest имеют нулевые заголовки.Обратите внимание, что я получаю не cookie-файл сеанса, как в большинстве примеров, а другие заголовки.

У меня есть тестовый клиент, который делает запрос, подобный следующему:

  WebSocketClient client = new StandardWebSocketClient();
  WebSocketStompClient stompClient = new WebSocketStompClient(client);

  StompSessionHandler sessionHandler = new TestClientStompSessionHandler(getObjectMapper());

  final WebSocketHttpHeaders headers = new WebSocketHttpHeaders();
  if (StringUtils.isNotBlank(token)) {
    LOGGER.error("Adding header           Authorization: Bearer " + token);
    headers.add("Authorization", "Bearer " + token);
  }

  headers.add("X-Foo", "bar");

  stompClient.connect(url, headers, sessionHandler);

Я уверен, что этодобавляет заголовки, потому что, если я запускаю через свой API-шлюз, для которого требуется токен-носитель, он работает (с действительным токеном)

1 Ответ

0 голосов
/ 12 июня 2019

Извините, мой плохой.Заголовки заполнены, только отладчик в Eclipse не показывал их.Или я был слепым.Или оба.

HttpHeaders headers = request.getHeaders();

дает мне то, что мне нужно.

...