1

我正在关注 Vert.x 4 的SockJS 文档,并注意到SockJSSocket我的处理程序中的每个都有一个.webSession()和一个.webUser(). 但是,除了.webSession().id()

我在此套接字处理程序所在的子路由器上注册了一个 AuthHandler,但我前端的 SockJS 客户端无法在 HTTP 升级请求中发送凭据。

我应该如何填充这些字段以供使用?

4

1 回答 1

1

我正在使用以下直截了当的代码来保持类似会话的信息可用:

class SockJSBridge implements Handler<BridgeEvent> {

  @Override
  void handle( BridgeEvent event ) {
    
    SockJSSocket socket = event.socket()
    MultiMap headers = socket.headers()

    switch( event.type() ){
      case REGISTER:
         def user = getUserFromJWTHeader event.rawMessage.headers.authorization
         headers.add 'userId', user.id
         break

      case SEND:
         String userId = headers.get 'userId'
         socket.write new JsonObject( address:userId, body:event.rawMessage?.body ).toBuffer()
         break
     }
  }
}

于 2021-01-12T14:08:42.600 回答