【问题标题】:How to customize websocket handshake and/or add a filter?如何自定义 websocket 握手和/或添加过滤器?
【发布时间】:2019-02-21 12:39:50
【问题描述】:

我需要以某种方式验证 websocket 请求。

有没有办法使用带有 reactor-netty 的 spring webflux 来实现?

  • spring-boot 2.0.5.Release
  • reactor-netty 0.7.9.Release

【问题讨论】:

    标签: spring-boot websocket spring-websocket spring-webflux reactor-netty


    【解决方案1】:

    这些版本包含使用 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 2015-08-07
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多