Как настроить рукопожатие websocket и / или добавить фильтр? - PullRequest
0 голосов
/ 17 сентября 2018

Мне нужно как-то проверить запросы websocket.

Есть ли способ добиться этого с помощью пружинного полотна с реактором-нетто?

  • с пружинной загрузкой 2.0.5. Выпуск
  • реактор-нетто 0,7,9. Выпуск

1 Ответ

0 голосов
/ 25 сентября 2018

Эти версии содержат ограниченные возможности для настройки чего-либо с помощью websocket.Единственный способ, который я нашел, - это расширить HandshakeWebSoketService:

public class CustomHandshakeWebSocketService extends HandshakeWebSocketService {

  public CustomHandshakeWebSocketService(
      RequestUpgradeStrategy upgradeStrategy
  ) {
    super(upgradeStrategy);
  }

  @Override
  public Mono<Void> handleRequest(
      ServerWebExchange exchange,
      WebSocketHandler handler
  ) {
    ServerHttpRequest request = exchange.getRequest();
    if ( //do some validation and if valid delegate to chain) {

      return super.handleRequest(exchange, handler);
    }
    // If not valid, return error
    return Mono
        .error(new ResponseStatusException(HttpStatus.BAD_REQUEST, "Invalid request"));
  }
}

Затем мы должны зарегистрировать этот пользовательский сервис:

@Bean
public WebSocketHandlerAdapter handlerAdapter() {
  return new WebSocketHandlerAdapter(webSocketService());
}

@Bean
public WebSocketService webSocketService() {
 ReactorNettyRequestUpgradeStrategy strategy = new ReactorNettyRequestUpgradeStrategy();
    return new CustomHandshakeWebSocketService(strategy);
}
...