Vert.x SockJS套接字“.webUser()”始终为空

Vert.x SockJS套接字“.webUser()”始终为空,vert.x,sockjs,vertx-verticle,vertx-eventbus,Vert.x,Sockjs,Vertx Verticle,Vertx Eventbus,我遵循Vert.x 4,注意到我的处理程序中的每个SockJSSocket都有一个.webSession()和一个.webUser()。但是,除了.webSession().id() 我在该套接字处理程序所在的子路由器上注册了一个AuthHandler,但我前端的SockJS客户端无法在HTTP升级请求中发送凭据 如何填充这些字段以供使用?我使用以下直接代码来保持类似会话的信息可用: class SockJSBridge implements Handler<BridgeEvent>

我遵循Vert.x 4,注意到我的处理程序中的每个
SockJSSocket
都有一个
.webSession()
和一个
.webUser()
。但是,除了
.webSession().id()

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


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

我使用以下直接代码来保持类似会话的信息可用:

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
     }
  }
}

类SockJSBridge实现处理程序{
@凌驾
无效句柄(BridgeEvent事件){
SockJSSocket=event.socket()
MultiMap headers=socket.headers()
开关(event.type()){
个案登记册:
def user=getUserFromJWTHeader event.rawMessage.headers.authorization
headers.add'userId',user.id
打破
案例发送:
字符串userId=headers.get'userId'
socket.write新JsonObject(地址:userId,body:event.rawMessage?.body).toBuffer()
打破
}
}
}

我认为您需要添加SessionHandler:
router.route().handler(SessionHandler.create(store)
按照我已经添加的
SessionHandler.create(LocalSessionStore.create(vertx))添加SessionHandler
进一步在我的路由器中处理身份验证。它对HTTP请求很好,因为我添加了JWT承载,但我不知道如何将JWT添加到初始SockJS HTTP握手请求中。你认为我应该使用不同的存储类型,而不是
LocalSessionStore
?Sweet,直截了当地说。你打算怎么做关于在客户端添加头?看起来不像是
sockjs客户端
支持头它不是sockjs客户端不支持头,而是websocket本身。请参阅。这就是为什么我必须首先建立“unsecured”连接,然后用第一个消息体发送头我也是这么做的,但我的实现要复杂得多,而且有缺陷。如何在客户端设置桥接事件类型?我没有。我只是使用
eventBus.registerHandler()
eventBus.send()
以默认方式设置事件类型的方法很有趣…我在以下操作中没有看到相同的行为(向下滚动到JS端的
registerHandler
。我的服务器只看到创建的
SOCKET\u
,从不
REGISTER
SEND